在C# .NET 3.5中使用JSON

3

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

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

现在,我可以将表示1个对象的JSON转换为C# .NET 3.5中的多个对象吗?

3个回答

10
你需要使用位于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字符串分解成多个对象。 - undefined
这个例子将把JSON反序列化为一个Person类型的对象列表。然后你可以遍历集合并逐个检查每个对象。 - undefined

5

下载Json.NET。它比我在.NET上看到的任何其他东西都更好地处理JSON。我认为Json序列化程序将完成您要求的操作。

此外,请查看右侧的相关问题。我相信您会在那里找到答案。


0
我已经将上述的 '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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接