Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#.NET 3.5中使用JSON_C#_.net_Json_File Io - Fatal编程技术网

在C#.NET 3.5中使用JSON

在C#.NET 3.5中使用JSON,c#,.net,json,file-io,C#,.net,Json,File Io,我找到了一些帮助器方法,可以将对象转换为JSONM,将JSON转换为对象。现在我正在读取一个json文件,该文件如下所示: /************************************************************************/ /* Coments Here *********************************************************/ /*************************************

我找到了一些帮助器方法,可以将对象转换为JSONM,将JSON转换为对象。现在我正在读取一个json文件,该文件如下所示:

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

现在,虽然我可以转换JSON表示1对象,但我将使用C#.NET 3.5在多个对象中转换它。

您需要使用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; }
}
[CollectionDataContract]
公共阶层人士:名单
{
}
[数据合同]
公共阶层人士
{
公众人物(){}
[数据成员]
公共int Id{get;set;}
[数据成员]
公共字符串名称{get;set;}
}
下面是一个要序列化(to)和反序列化(From)的帮助器类

使用System.Runtime.Serialization;
使用System.Runtime.Serialization.Json;
公共类jsonHelper
{
公共静态字符串到(T obj)
{
字符串retVal=null;
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer=新的System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
使用(MemoryStream ms=new MemoryStream())
{
serializer.WriteObject(ms,obj);
retVal=Encoding.Default.GetString(ms.ToArray());
}
返回返回;
}
公共静态T From(字符串json)
{
T obj=Activator.CreateInstance();
使用(MemoryStream ms=new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer=新的System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
obj=(T)serializer.ReadObject(ms);
}
返回obj;
}
}
因此,获取上面的json并将其发送到上面jsonHelper类中的From方法

People peeps = jsonHelper.From<People>(input);
People peeps=jsonHelper.From(输入);
下载。它比我在.NET中看到的任何东西都能更好地处理JSON。我认为Json序列化程序会满足您的要求


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

我已将上述“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;
    }
publicstatict反序列化(字符串json)
{
T-obj;
使用(MemoryStream ms=newmemoryStream(Encoding.Default.GetBytes(json)))
{
System.Runtime.Serialization.Json.DataContractJsonSerializer反序列化器=新的System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
obj=(T)deserializer.ReadObject(ms);
}
返回obj;
}
然后,如果您有一个对象数组:

Person[] personArray = JsonHelper.Deserialize<Person[]>(input);
Person[]personArray=JsonHelper;
或者,如果您有一个对象:

Person person = JsonHelper.Deserialize<Person>(input);
Person-Person=JsonHelper.反序列化(输入);

这是我已经拥有的,但对于JSON中的多个对象来说,这是行不通的,就像给出的示例一样。我希望能够读入包含多个对象的JSON对象,并将它们放入一个列表中。我只是不知道如何将文件中的JSON字符串拆分为多个对象。这里的示例将JSON反序列化为Person类型的对象列表。然后您可以迭代集合并单独检查每个对象。
Person person = JsonHelper.Deserialize<Person>(input);