【问题标题】:Working with JSON in C# .NET 3.5在 C# .NET 3.5 中使用 JSON
【发布时间】:2011-01-29 19:44:36
【问题描述】:

我找到了一些帮助方法,可以让我将对象转换为 JSONM 并将 JSON 转换为对象。现在我正在阅读一个看起来像这样的 json 文件:

/************************************************************************/
/* Coments Here *********************************************************/
/************************************************************************/
//more comments  
[{
  "Id": 1,
  "Name": "HP Up"
},
{
  "Id": 2,
  "Name": "Regeneration"
}]

现在虽然我可以将 JSON 转换为代表 1 个对象,但我会使用 C# .NET 3.5 将其转换为多个对象吗?

【问题讨论】:

    标签: c# .net json file-io


    【解决方案1】:

    您需要使用 System.Runtime.Serialization.Json 命名空间中的 DataContractJsonSerializer。使用 [DataContract] 属性标记您的类,使用 [CollectionDataContract] 属性标记集合类,使用 [DataMember] 属性标记属性。

    [CollectionDataContract]
    public class People : List<Person>
    {
    
    }
    
    [DataContract]
    public class Person
    {
         public Person() { }
    
         [DataMember]
         public int Id{ get; set; }
    
         [DataMember]
         public string Name { get; set; }
    }
    

    这是一个帮助类来序列化(To)和反序列化(From)

    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;
    
    public class jsonHelper
    {
        public static string To<T>(T obj)
        {
            string retVal = null;
            System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
            using (MemoryStream ms = new MemoryStream())
            {
             serializer.WriteObject(ms, obj);
             retVal = Encoding.Default.GetString(ms.ToArray());
            }
    
            return retVal;
        }
    
        public static T From<T>(string json)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
             System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
             obj = (T)serializer.ReadObject(ms);
            }
    
            return obj;
        }
    }
    

    所以把你上面的 json 发送到上面的 jsonHelper 类中的 From 方法

    People peeps = jsonHelper.From<People>(input);
    

    【讨论】:

    • 这就是我已经拥有的,但对于 JSON 中的多个对象,就像给出的示例一样。我希望能够读取具有多个对象的 JSON 对象并将它们放入一个列表中,我只是不知道如何将文件中的 JSON 字符串分解为多个对象。
    • 这里的示例将 JSON 反序列化为 Person 类型的对象列表。然后您可以迭代集合并单独检查每个对象。
    【解决方案2】:

    下载Json.NET。这比我在 .NET 中看到的任何东西都更好地处理 JSON。我认为 Json 序列化程序会满足您的要求。

    另外,看看右边的相关问题。我相信你会在那里找到答案。

    【讨论】:

      【解决方案3】:

      我已经把上面的'From'方法改成了这个,为了得到一个对象数组:

      public static T Deserialize<T>(string json)
          {
              T obj;
              using (MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(json)))
              {
                  System.Runtime.Serialization.Json.DataContractJsonSerializer deserializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
                  obj = (T)desirializer.ReadObject(ms);
              }
      
              return obj;
          }
      

      然后,如果你有一个对象数组:

      Person[] personArray = JsonHelper.Deserialize<Person[]>(input);
      

      或者如果你有一个对象:

      Person person = JsonHelper.Deserialize<Person>(input);
      

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 2020-10-16
        • 2011-01-17
        • 1970-01-01
        相关资源
        最近更新 更多