zoukankan      html  css  js  c++  java
  • .NET 中JSON反序列化经验分享

      这几天一直.Net中处理JSON数据,走了很多弯路,还是技术不行的问题,太多东西不懂,最终还是解决了,分享下经验

      在.Net4.0中已经提供的很友好的Json处理方法,我们可以方便的添加System.Runtime.Serializaton.Json这个引用,利用其中的方法进行处理,这个大家可以通过查询MSDN得到很好的解答,需要注意的是使用System.Runtime.Serializaton.Json这个引用之前需要添加System.ServiceModel.Web和System.Runtime.Serializaton,他们之间的调用关系可以通过Reflector进行查看。

    JSON数据反序列化为泛型T
    1 DataContractJsonSerializer dcjs =new DataContractJsonSerializer(typeof(T));
    2 MemoryStream ms =new MemoryStrea(Encoding.Unicode.GetBytes(jsonString));
    3 T t = (T)dcjs.ReadObject(ms);

          在.Net 3.5中我查到资料是已经支持我上面说的第一种方法,我这里调用一直会出现问题,可能是我DLL的版本问题导致的,没有进行深入的研究。上网搜了下,找到了开源的json.NET的DLL,下载地址:http://json.codeplex.com/

      json.NET中提供了较多了方法给我们使用,灵活度相当的高,我这里举两个简单的例子:

      在我们需要反序列化的类和json中的数据完全匹配的情况下,使用DeserializeObject方法是最方便快速的,切忌类型要一致,否则会出现无法转换的错误。

    在匹配的情况下json to a .net object
    T or= JsonConvert.DeserializeObject<T>(jsonString);

      如果我们需要更灵活的反序列化方法,可以使用Newtonsoft.Json.Linq下的JObject进行,利用这个方法我们就可以很方便的控制反序列化后每个属性的类型,具体看例子,例子来着json.NET的文档:

    灵活的反序列化
    1 string jsonText =@"{
    2 ""short"":{
    3 ""original"":""http://www.foo.com/"",
    4 ""short"":""krehqk"",
    5 ""error"":{
    6 ""code"":0,
    7 ""msg"":""No action taken""}
    8 }";
    9
    10 JObject json = JObject.Parse(jsonText);
    11
    12 Shortie shortie =new Shortie
    13 {
    14 Original = (string)json["short"]["original"],
    15 Short = (string)json["short"]["short"],
    16 Error =new ShortieException
    17 {
    18 Code = (int)json["short"]["error"]["code"],
    19 ErrorMessage = (string)json["short"]["error"]["msg"]
    20 }
    21 };
    22
    23 Console.WriteLine(shortie.Original);
    24 //http://www.foo.com/
    25
    26 Console.WriteLine(shortie.Error.ErrorMessage);
    27 // No action taken

      还是个初学者,还有很多东西要学习,有什么错误和补充的地方,希望大家积极留意~

  • 相关阅读:
    MySql索引
    MySql事务、隔离级别
    41. 缺失的第一个正数
    442. 数组中重复的数据
    448. 找到所有数组中消失的数字
    转载:神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)
    转载:神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(一)
    697. 数组的度
    第三章 进程描述与控制
    C++ 对象成员函数(非静态方法)
  • 原文地址:https://www.cnblogs.com/nightcat/p/1970400.html
Copyright © 2011-2022 走看看