作业帮 > 综合 > 作业

C# JSON 反序列化

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/01 22:09:08
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
能否再给我上一课,说一下DataContractJsonSerializer与JavaScriptSerializer有什么区别,在哪种情况下选择哪个比较合理,有在网上搜了一下,都是英文的,看不大懂...
---------------------------
感谢【depluin】的解答:
……
DataContractJsonSerializer 可以处理其中的键类型不是字符串的词典,而 JavascriptSerializer 则无法处理,在这一方面前者的功能更为强大.但后者与 JSON 的兼容性更好.
可惜百度知道没有分配分数的功能,只能将分数给与其中一个,
不要用DataContract
var serialize = new JavaScriptSerializer();
var obj= serialize.Deserialize(str);
可以{"112":0,"325":1,"109":4}
str.Replace(",","},{");
"["+str+"]"
将Json对象转为HashTable再进行后序列化