C#的文本框错误信息提示过长报错 JsonReaderException,有什么办法可以解决让可反序列长文本框错误信息提示

C#解析json文件的实现代码
转载 & & 作者:
最近需要用c#解析json文件,以前没用过这个,百度了一下找到了这篇文章感觉不错,特分享下
C# 解析 json
  JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。
JSON与XML的比较
◆可读性  JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。◆文件大小与传输  XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势。
1. JSON 语法是 JavaScript 对象表示法语法的子集。
•数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。•数据由逗号分隔:•花括号保存对象:对象可以包含各种数据,包括数组。•方括号保存数组:数字可以包含对象。
代码如下:{&&& "employees": [&&&&&&& {&&&&&&&&&&& "firstName": "Bill",&&&&&&&&&&& "lastName": "Gates"&&&&&&& },&&&&&&& {&&&&&&&&&&& "firstName": "George",&&&&&&&&&&& "lastName": "Bush"&&&&&&& }&&& ]}
2. 如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\\"而不是"\"。例如:{ "file":"C:\\a.txt"}。
.NET操作JSON  JSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。操作JSON通常有以下几种方式:1. 原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串。如非必要,应该很少人会走这条路,从头再来的。
2. 通用方式【★★★★★】:
这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后加入工程就能用。通常可以使用JObject, JsonReader, JsonWriter处理。这种方式最通用,也最灵活,可以随时修改不爽的地方。(1)使用JsonReader读Json字符串:
代码如下:string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read()){&&& Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value);}
(2)使用JsonWriter写字符串:
代码如下:StringWriter sw = new StringWriter();JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();writer.WritePropertyName("input");writer.WriteValue("value");writer.WritePropertyName("output");writer.WriteValue("result");writer.WriteEndObject();writer.Flush();
string jsonText = sw.GetStringBuilder().ToString();Console.WriteLine(jsonText);
(3)使用JObject读写字符串:
代码如下:JObject jo = JObject.Parse(jsonText);string[] values = jo.Properties().Select(item =& item.Value.ToString()).ToArray();
(4)使用JsonSerializer读写对象(基于JsonWriter与JsonReader):
数组型数据
代码如下:string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);string ja1a = ja[1]["a"].ToString();//或者JObject o = (JObject)ja[1];string oa = o["a"].ToString();
代码如下:string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);string zone = jo["beijing"]["zone"].ToString();string zone_en = jo["beijing"]["zone_en"].ToString();
自定义类Project
代码如下:Project p = new Project() { Input = "stone", Output = "gold" };JsonSerializer serializer = new JsonSerializer();StringWriter sw = new StringWriter();serializer.Serialize(new JsonTextWriter(sw), p);Console.WriteLine(sw.GetStringBuilder().ToString());
StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}");Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));Console.WriteLine(p1.Input + "=&" + p1.Output);
上面的代码都是基于下面这个Project类定义:
代码如下:class Project{&&& public string Input { }&&& public string Output { }}
此外,如果上面的JsonTextReader等类编译不过的话,说明是我们自己修改过的类,换成你们自己的相关类就可以了,不影响使用。
3. 内置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化,很直接。
代码如下:Project p = new Project() { Input = "stone", Output = "gold" };&JavaScriptSerializer serializer = new JavaScriptSerializer();&var json = serializer.Serialize(p);&Console.WriteLine(json);
&var p1 = serializer.Deserialize&Project&(json);&Console.WriteLine(p1.Input + "=&" + p1.Output);&Console.WriteLine(ReferenceEquals(p,p1));
注意:如果使用的是VS2010,则要求当前的工程的Target Framework要改成.Net Framework 4,不能使用Client Profile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。  此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。
4. 契约方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory实现。
代码如下:Project p = new Project() { Input = "stone", Output = "gold" };DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType());string jsonT
using (MemoryStream stream = new MemoryStream()){&&& serializer.WriteObject(stream, p);&&& jsonText = Encoding.UTF8.GetString(stream.ToArray());&&& Console.WriteLine(jsonText);}
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText))){&&& DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project));&&& Project p1 = (Project)serializer1.ReadObject(ms);&&& Console.WriteLine(p1.Input + "=&" + p1.Output);}
这里要注意,这里的Project类和成员要加相关的Attribute:
代码如下:[DataContract]class Project{&&& [DataMember]&&& public string Input { }&&& [DataMember]&&& public string Output { }}
实用参考:JSON验证工具:JSON简明教程:Newtonsoft.Json类库下载:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具没有更多推荐了,
不良信息举报
举报内容:
在C#中,Json的序列化和反序列化的几种方式
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!反序列化json,出错,因为有特殊字符,请问怎么处理
[问题点数:40分,结帖人zhenhunfan4]
反序列化json,出错,因为有特殊字符,请问怎么处理
[问题点数:40分,结帖人zhenhunfan4]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|I am trying to deserialize a json output to a C# object.
JSON result:
{"order":{"commission":3.490000,"cost":4.490000,"duration":"day","extended_hours
":false,"fees":0.000000,"class":"equity","price":1.000000,"quantity":1.000000,"r
equest_date":"T09:43:17.118Z","result":true,"side":"buy","status":"ok"
,"symbol":"DIS","type":"limit"}}
My derived class from JSON:
public class Rootobject
public Order Order { }
public class Order
public float commission { }
public float cost { }
public string duration { }
public bool extended_hours { }
public int fees { }
public string _class { }
public int price { }
public int quantity { }
public DateTime request_date { }
public bool result { }
public string side { }
public string status { }
public string symbol { }
public string type { }
Code used to deserialize (JSON.NET from Newtonsoft) :
Rootobject ord = JsonConvert.DeserializeObject&Rootobject&(responsebody);
I am getting the following error.
Unhandled Exception: System.FormatException: Input string was not in a correct format.
at Newtonsoft.Json.Utilities.ConvertUtils.Int32Parse(Char[] chars, Int32 start, Int32 length)
at Newtonsoft.Json.JsonTextReader.ParseNumber()
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonTextReader.ReadInternal()
at Newtonsoft.Json.JsonReader.ReadAsInt32Internal()
at Newtonsoft.Json.JsonTextReader.ReadAsInt32()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(Jso
nReader reader, JsonContract contract, Boolean hasConverter)
I have tried saving the deserialized result to a "dynamic" object which works fine. But I do not want to use the dynamic object for mapping the fields.
Please advice.
Note: Also the 3rd party API is sending a field called "class". How do I call this as I get compile-time error when I try to directly call the field.
解决方案 You have the fees property in the Order class defined as an int but in the JSon text it is 0.00000, i.e. a float or double. I think you may need to make the fees property into a float in order to parse it properly. Looks the same for the price and quantity properties too.
本文地址: &
我试图反序列化JSON输出到C#对象。
JSON结果:
{“序”:{“好处费”:3.490000,“成本”:4.490000“持续时间“:”天“,”extended_hours “:假的,”学费“:0.000000,”阶级“:”公平“,”价格“:1.000000,”量“:1.000000,”R
equest_date “:”T09:43:17.118Z“,”结果“:真实的,”方“:”买“,”状态“:”OK“,”符号“:”DIS“,”类型“:”限制“}}
这是JSON我的派生类:
公共类Rootobject
{治安秩序得到{;组; } }
公共类订单 {公众持股量的佣金{搞定;组; } 公众持股成本{搞定;组; } 公共字符串时间{获得;组; } 公共BOOL extended_hours {搞定;组; } 公众诠释费{搞定;组; } 公共字符串_class {搞定;组; } 公众诠释价格{搞定;组; } 公众诠释数量{搞定;组; } 公众的DateTime REQUEST_DATE {搞定;组; } 公共BOOL结果{搞定;组; } 公共弦面{搞定;组; } 公共字符串状态{搞定;组; } 公共字符串符号{搞定;组; } 公共字符串类型{搞定;组; } }
代码用于(从Newtonsoft JSON.NET)反序列化:
Rootobject ORD = JsonConvert.DeserializeObject< Rootobject>(responsebody);
我收到以下错误。
未处理的异常:System.FormatException:输入字符串的不正确的格式。 在Newtonsoft.Json.Utilities.ConvertUtils.Int32Parse(的char []字符,开始的Int32,的Int32长度)在Newtonsoft.Json.JsonTextReader.ParseNumber ()在Newtonsoft.Json.JsonTextReader .ParseValue()在Newtonsoft.Json.JsonTextReader.ReadInternal()在Newtonsoft.Json.JsonReader.ReadAsInt32Internal ()在Newtonsoft.Json.JsonTextReader.ReadAsInt32 ()在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JSO
nReader读卡器,JsonContract合同,布尔hasConverter)
我曾尝试保存反序列化的结果为“动态”的对象,它工作正常。 。但我不希望使用动态对象映射域
请注意:另外,第三方API发送一个名为“类”字段。我如何把这个作为我得到编译时错误,当我尝试直接调用现场。
解决方案 您有费用定义为 INT 而在订单类属性JSON的文本是 0.00000 ,即浮动或双击。我想你可能需要让费用属性到浮动,以便正确地解析它。查找价格和量属性了。 相同
本文地址: &
扫一扫关注官方微信C#操作JSON学习
编辑:www.fx114.net
本篇文章主要介绍了"C#操作JSON学习 ",主要涉及到C#操作JSON学习 方面的内容,对于C#操作JSON学习 感兴趣的同学可以参考一下。
JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript语法标准的一个子集。 JSON采用完全独立于语言的文本格式,可以很容易在各种网络、平台和程序之间传输。JSON的语法很简单,易于人阅读和编写,同时也易于机器解析和生成。
JSON与XML的比较◆可读性JSON和XML的可读性相比较而言,由于XML提供辅助的标签,更加适合人阅读和理解。◆文件大小与传输XML允许使用方便的标签,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主战场是Javascript与网络,在这里,JSON有着XML无法赶超的优势。
JSON语法1. JSON 语法是 JavaScript 对象表示法语法的子集。 &数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。&数据由逗号分隔:&花括号保存对象:对象可以包含各种数据,包括数组。&方括号保存数组:数字可以包含对象。
"employees": [
"firstName": "Bill",
"lastName": "Gates"
"firstName": "George",
"lastName": "Bush"
]}
2. 如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\\"而不是"\"。例如:{ "file":"C:\\a.txt"}。.NET操作JSONJSON文件读入到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。操作JSON通常有以下几种方式:1. 原始方式:自己按照JSON的语法格式,写代码直接操作JSON字符串。如非必要,应该很少人会走这条路,从头再来的。2. 通用方式:这种方式是使用开源的类库Newtonsoft.Json(下载地址)。下载后加入工程就能用。通常可以使用JObject, JsonReader, JsonWriter处理。这种方式最通用,也最灵活,可以随时修改不爽的地方。(1)使用JsonReader读Json字符串:string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";JsonReader reader = new JsonTextReader(new StringReader(jsonText)); while (reader.Read()){
Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value);}(2)使用JsonWriter写字符串:StringWriter sw = new StringWriter();JsonWriter writer = new JsonTextWriter(sw); writer.WriteStartObject();writer.WritePropertyName("input");writer.WriteValue("value");writer.WritePropertyName("output");writer.WriteValue("result");writer.WriteEndObject();writer.Flush(); string jsonText = sw.GetStringBuilder().ToString();Console.WriteLine(jsonText);(3)使用JObject读写字符串:JObject jo = JObject.Parse(jsonText);string[] values = jo.Properties().Select(item =& item.Value.ToString()).ToArray();(4)使用JsonSerializer读写对象(基于JsonWriter与JsonReader):Project p = new Project() { Input = "stone", Output = "gold" };JsonSerializer serializer = new JsonSerializer();StringWriter sw = new StringWriter();serializer.Serialize(new JsonTextWriter(sw), p);Console.WriteLine(sw.GetStringBuilder().ToString()); StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}");Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));Console.WriteLine(p1.Input + "=&" + p1.Output);上面的代码都是基于下面这个Project类定义:class Project{
public string Input { }
public string Output { }}此外,如果上面的JsonTextReader等类编译不过的话,说明是我们自己修改过的类,换成你们自己的相关类就可以了,不影响使用。3. 内置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化,很直接。Project p = new Project() { Input = "stone", Output = "gold" }; JavaScriptSerializer serializer = new JavaScriptSerializer(); var json = serializer.Serialize(p); Console.WriteLine(json);
var p1 = serializer.Deserialize&Project&(json); Console.WriteLine(p1.Input + "=&" + p1.Output); Console.WriteLine(ReferenceEquals(p,p1));注意:如果使用的是VS2010,则要求当前的工程的Target Framework要改成.Net Framework 4,不能使用Client Profile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。
4. 契约方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory实现。Project p = new Project() { Input = "stone", Output = "gold" };DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType());string jsonT using (MemoryStream stream = new MemoryStream()){
serializer.WriteObject(stream, p);
jsonText = Encoding.UTF8.GetString(stream.ToArray());
Console.WriteLine(jsonText);} using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText))){
DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project));
Project p1 = (Project)serializer1.ReadObject(ms);
Console.WriteLine(p1.Input + "=&" + p1.Output);}这里要注意,这里的Project类和成员要加相关的Attribute:[DataContract]class Project{
[DataMember]
public string Input { }
[DataMember]
public string Output { }}实用参考:JSON验证工具:JSON简明教程:Newtonsoft.Json类库下载:--------------下面这段文章很好----------
& 首先,大家要明白什么是json,了解更多关于json方面资料大家可以点击,我在这里简单介绍下json:
&&&&JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
&&&&&在.NET环境下面,我们使用Json.net来实现JSON数据的序列化和反序列化。
&&&&&首先点击连接http://sourceforge.net/projects/csjson/?source=dlp&下载JSON .NET插件和代码。
&&&&&然后在项目中进行引用Newtonsoft.Json.dll
&&&&&添加命名空间:using Newtonsoft.J
&&&&&下面介绍json序列化和反序列化的放个重要方法和例子:
JsonConvert.SerializeObject(object value)序列化,它有个重载方法JsonConvert.SerializeObject(object value, params JsonConverter[] converters)。JsonConvert.DeserializeObject(string value, Type type),反序列化,它有个重载方法JsonConvert.DeserializeObject(string value, Type type, params JsonConverter[] converters)这两个方法可以实现基本的序列化和反序列化要求,请看下面的例子:
首先我们先建一个Person类代码如下:
&&public class Person&&&&{&&&&&&&&&&&&&&&&public string Name&&&&&&&&{&&&&&&&&&&&&get { }&&&&&&&&&&&&set { name = }&&&&&&&&}
&&&&&&&&&&&&&&&&public int Age&&&&&&&&{&&&&&&&&&&&&get { }&&&&&&&&&&&&set { age = }&&&&&&&&}&&&&}
1)序列化
&using Susing System.Collections.Gusing System.Lusing System.Wusing System.Web.UI;using System.Web.UI.WebCusing Newtonsoft.J
namespace JSONnet{&&&&public partial class test : System.Web.UI.Page&&&&{&&&&&&&&protected void Page_Load(object sender, EventArgs e)&&&&&&&&{&&&&&&&&&&&&Person person = new Person();&&&&&&&&&&&&person.Name = "GoldenEasy";&&&&&&&&&&&&person.Age = 25;&&&&&&&&&&&&string strSerializeJSON = JsonConvert.SerializeObject(person);&&&&&&&&&&&&Response.Write(strSerializeJSON);&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&}&&&&}}
输出结果:
{"Name":"GoldenEasy","Age":25}
2)反序列化
using Susing System.Collections.Gusing System.Lusing System.Wusing System.Web.UI;using System.Web.UI.WebCusing Newtonsoft.J
namespace JSONnet{&&&&public partial class test : System.Web.UI.Page&&&&{&&&&&&&&protected void Page_Load(object sender, EventArgs e)&&&&&&&&{&&&&&&&&&&&&Person person = new Person();&&&&&&&&&&&&person.Name = "GoldenEasy";&&&&&&&&&&&&person.Age = 25;&&&&&&&&&&&&string strSerializeJSON = JsonConvert.SerializeObject(person);&&&&&&&&&&&&&&&&&&&&&&&Person user = (Person)JsonConvert.DeserializeObject(strSerializeJSON, typeof(Person));&&&&&&&&&&&&Response.Write(user.Name);&&&&&&&&&
&&&&&&&&}&&&&}}
输出结果为:GoldenEasy
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------以下文章转载
http://www.cnblogs.com/TankXiao/p/3637495.html#generateJSONC#操作JSON
RestAPI中, 经常需要操作json字符串, &需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串。
C# 操作json, &比较简单。 &本文介绍几种方法
步骤
Json 字符串 反序列化成对象 共需要2步:
第一步:建立相应的实体类
第二步: 调用方法把Json字符串"反序列化"成对象
了解json的语法
首先要了解json的语法,这样才能知道怎么创建实体类.
Json 的语法很简单, 就四条
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
创建实体类的例子
{"FirstName":"小坦克","LastName":"Tank","Age":30}
相应的实体类可以为
public class Person
public String FirstName
public String LastName
public int Age
&
自动生成JSON的实体类
一个复杂的实体类,我们自己去写的话,可能需要1个小时以上。 那有没有工具能直接生成实体类呢,这样能方便太多了。 &当然有
& ----开源的winform工具。
使用第三方工具&Newtonsoft.Json.dll
优点: &使用非常方便. & 看个例子就知道怎么用了
下载地址 &&
using S
using System.Collections.G
using System.L
using System.T
using Newtonsoft.J
namespace JsonDemo
{
class Program
static void Main(string[] args)
string personJson = "{ 'FirstName': '小坦克','LastName':'Tank xiao', 'Age':'30', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]}";
string allMoveJson = @"[{ 'FirstName': '小坦克','LastName':'Tank xiao', 'Age':'30', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]},{
'FirstName': '小坦克2','LastName':'Tank xiao2', 'Age':'40', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]}]";
// 反序列化 单个对象
Person oneMovie = JsonConvert.DeserializeObject&Person&(personJson);
// 反序列化 对象集合
List&Person& allMovie = JsonConvert.DeserializeObject&List&Person&&(allMoveJson);
Console.WriteLine(oneMovie.FirstName);
Console.WriteLine(allMovie[1].FirstName);
string afterJson = JsonConvert.SerializeObject(allMovie);
public class Person
public String FirstName
{ get; set; }
public String LastName
{ get; set; }
public int Age
{ get; set; }
public List&Book& Books
{ get; set; }
public class Book
public string BookName
{ get; set; }
public string Price
{ get; set; }
&-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C# Json序列化工具 &Newtonsoft.Json简介和使用
Newtonsoft.Json,是.Net中开源的Json序列化和反序列化工具,官方地址:。
功能比较多,效率比较高,官方给出对比数据
50% faster than DataContractJsonSerializer, and 250% faster than JavaScriptSerializer.
比较常用的功能除了序列化反序列化之外,还有 Linq To Json、Json Path、 XML support等
更多详情参考:
使用方法简单:
使用命令
Install-Package Newtonsoft.Json
或者右键,项目》Nuget包管理,添加&简答使用实例如下:
1.定义类:
/// &summary&
/// 学生信息实体
/// &/summary&
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public Class Class { get; set; }
}
/// &summary&
/// 学生班级实体
/// &/summary&
public class Class
{
public int ID { get; set; }
public string Name { get; set; }
}
2.序列化,反序列化 实体对象,实体集合,匿名对象:
Student stu = new Student();
stu.ID = 1;
stu.Name = "张三";
stu.Class = new Class() { ID = 0121, Name = "CS0121" };
//使用方法1
//实体序列化、反序列化
//结果:{"ID":1,"Name":"张三","Class":{"ID":121,"Name":"CS0121"}}
string json1 = JsonConvert.SerializeObject(stu);
Console.WriteLine(json1);
Student stu2 = JsonConvert.DeserializeObject&Student&(json1);
Console.WriteLine(stu2.Name + "---" + stu2.Class.Name);
//实体集合,序列化和反序列化
List&Student& stuList = new List&Student&() { stu, stu2 };
string json2 = JsonConvert.SerializeObject(stuList);
Console.WriteLine(json2);
List&Student& stuList2 = JsonConvert.DeserializeObject&List&Student&&(json2);
foreach (var item in stuList2)
{
Console.WriteLine(item.Name + "----" + item.Class.Name);
}
//匿名对象的解析,
//匿名独享的类型
obj.GetType().Name: "&&f__AnonymousType0`2"
var obj = new { ID = 2, Name = "李四" };
string json3 = JsonConvert.SerializeObject(obj);
Console.WriteLine(json3);
object obj2 = JsonConvert.DeserializeAnonymousType(json3, obj);
Console.WriteLine(obj2.GetType().GetProperty("ID").GetValue(obj2));
object obj3 = JsonConvert.DeserializeAnonymousType(json3, new { ID = default(int), Name = default(string) });
Console.WriteLine(obj3.GetType().GetProperty("ID").GetValue(obj3));
//匿名对象解析,可以传入现有类型,进行转换
Student stu3 = new Student();
stu3 = JsonConvert.DeserializeAnonymousType(json3, new Student());
Console.WriteLine(stu3.Name);
更多内容可以参考博客
http://www.cnblogs.com/freshman0216/p/4161800.html
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:}

我要回帖

更多关于 文本框错误信息提示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信