C# JSON 反序列化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# JSON 反序列化相关的知识,希望对你有一定的参考价值。
下面的JSON字符串要转为对象比较容易:
JSON字符串:"A":0,"B":1,"C":0,"D":3
[DataContract(Namespace = "XXX")]
public class MyClass
[DataMember(Order = 1)]
public int A get; set;
[DataMember(Order = 2)]
public int B get; set;
[DataMember(Order = 3)]
public int C get; set;
[DataMember(Order = 4)]
public int D get; set;
var ser = new DataContractJsonSerializer(typeof(MyClass));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(JSON字符串));
MyClass myClass1 = (MyClass)ser.ReadObject(ms);
运用以上代码即可成功转换.
问题是,像下边这样的JSON字符串该如何转换
JSON字符串:"112":0,"325":1,"109":4
这样是不可取的:
[DataContract(Namespace = "XXX")]
public class MyClass
[DataMember(Order = 1)]
public int 112 get; set;
[DataMember(Order = 2)]
public int 325 get; set;
[DataMember(Order = 3)]
public int 109 get; set;
因为C#中变量不能以数字开头,而且类似"112":0这样的项不是固定不变的,数量也不固定.试过用SortedList,但不能成功.请有经验的赐教一下.
不固定的意思是说:这一次是"112":0下一次可能就是"113":0或"234243":0等等,无法预知会来个什么.
数量不固定的意思是说:例子中只给出了3个,但也可能是3万个.
个人凭经验觉得这应该是一个字典类,因为字典类可以用任何字符串做KEY,可以容纳任意数量的项.
原来还有javascriptSerializer这东西
JavaScriptSerializer能支持SortedList<string, int>
所以问题很简单就解决了,谢谢.
能否再给我上一课,说一下DataContractJsonSerializer与JavaScriptSerializer有什么区别,在哪种情况下选择哪个比较合理,有在网上搜了一下,都是英文的,看不大懂...
---------------------------
感谢【depluin】的解答:
……
DataContractJsonSerializer 可以处理其中的键类型不是字符串的词典,而 JavascriptSerializer 则无法处理,在这一方面前者的功能更为强大。但后者与 JSON 的兼容性更好。
====================================
可惜百度知道没有分配分数的功能,只能将分数给与其中一个,再次感谢两位的帮助!
在下面的列表中:此字典用 JSON 对象表示:
DataContractJsonSerializer 将其表示为 ["Key":"one","Value":1,"Key":"two","Value":2]
JavascriptSerializer 将其表示为 “one”:1,”two”:2
DataContractJsonSerializer 可以处理其中的键类型不是字符串的词典,而 JavascriptSerializer 则无法处理,在这一方面前者的功能更为强大。但后者与 JSON 的兼容性更好。 参考技术B 不要用DataContract
var serialize = new JavaScriptSerializer();
var obj= serialize.Deserialize<MyClass>(str);
可以"112":0,"325":1,"109":4
str.Replace(",",",");
"["+str+"]"
将Json对象转为HashTable再进行后序列化本回答被提问者采纳
c# 多个json字符串反序列化
参考技术A建议你这样试试看:
- 添加Newtonsoft.Json动态链接库,引入命名空间using Newtonsoft.Json;
使用JsonConvert.SerializeObject(object data),将数据转换为Json格式的字符串
使用JsonConvert.DeserializeObject<T>((string data),将Json格式字符串转换为以T为数据类型的变量/对象
以上是关于C# JSON 反序列化的主要内容,如果未能解决你的问题,请参考以下文章