C# 使用.Net反序列化Json

C# 使用.Net反序列化Json,c#,.net,json,deserialization,C#,.net,Json,Deserialization,我有一个以这种格式返回JSON的外部供应商API {"3":{"id":1,"name":"Scott Foo","age":55}, "59":{"id":2,"name":"Jim Morris","age":62}} 我正在尝试使用以下代码对其进行反序列化 [DataContract] public class Name { [DataMember] public int id { get; set; } [DataMember] public stri

我有一个以这种格式返回JSON的外部供应商API

{"3":{"id":1,"name":"Scott Foo","age":55},
"59":{"id":2,"name":"Jim Morris","age":62}}
我正在尝试使用以下代码对其进行反序列化

[DataContract]
public class Name
{
    [DataMember]
    public int id { get; set; }

    [DataMember]
    public string name { get; set; }

    [DataMember]
    public int age{ get; set; }
}
要反序列化的代码是

List<Name> nameList = Deserialize<List<Name>>(temp); 
List nameList=反序列化(临时);
其中反序列化定义为

public static T Deserialize<T>(string json)
{
    T obj = Activator.CreateInstance<T>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    obj = (T)serializer.ReadObject(ms);
    ms.Close();
    ms.Dispose();
    return obj;
}
publicstatict反序列化(字符串json)
{
T obj=Activator.CreateInstance();
MemoryStream ms=新的MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer=新的DataContractJsonSerializer(obj.GetType());
obj=(T)serializer.ReadObject(ms);
Close女士();
Dispose女士();
返回obj;
}

名称列表中返回的对象的计数为零。任何关于如何在.Net中反序列化此JSON的想法(即不使用JSON.Net或任何此类第三方dll)?

理论上,您的根对象是这样的

public class root
{
    public Name 3;
    public Name 59;
}
但是359不是有效的c#变量/字段/属性名称(它们也是动态的)。因此,不能将其反序列化为类

我知道您不想使用Json.Net或任何类似的第三方DLL,但这就是我使用

以及输出

3==>Scott Foo
59==>Jim Morris

理论上,你的根对象是这样的

public class root
{
    public Name 3;
    public Name 59;
}
但是359不是有效的c#变量/字段/属性名称(它们也是动态的)。因此,不能将其反序列化为类

我知道您不想使用Json.Net或任何类似的第三方DLL,但这就是我使用

以及输出

3==>Scott Foo
59==>Jim Morris
这里有一个选择

//using System.Runtime.Serialization.Json;

public static dynamic Deserialize(string content)
{
    return new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(content);
}

var f = Deserialize(json);
List<Name> list = new List<Name>();

foreach(var item1 in (Dictionary<string, object>) f)
{
    Dictionary<string, object> item2 = (Dictionary<string, object>) item1.Value;

    list.Add( new Name(){
        id = (int) item2["id"],
        name = (string) item2["name"],
        age = (int) item2["age"]
    });             

}
//使用System.Runtime.Serialization.Json;
公共静态动态反序列化(字符串内容)
{
返回新的System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(内容);
}
var f=反序列化(json);
列表=新列表();
foreach(字典f中的var item1)
{
Dictionary item2=(Dictionary)item1.Value;
list.Add(新名称(){
id=(int)项2[“id”],
名称=(字符串)项2[“名称”],
年龄=(int)项2[“年龄”]
});             
}
这里有一个选项

//using System.Runtime.Serialization.Json;

public static dynamic Deserialize(string content)
{
    return new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(content);
}

var f = Deserialize(json);
List<Name> list = new List<Name>();

foreach(var item1 in (Dictionary<string, object>) f)
{
    Dictionary<string, object> item2 = (Dictionary<string, object>) item1.Value;

    list.Add( new Name(){
        id = (int) item2["id"],
        name = (string) item2["name"],
        age = (int) item2["age"]
    });             

}
//使用System.Runtime.Serialization.Json;
公共静态动态反序列化(字符串内容)
{
返回新的System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(内容);
}
var f=反序列化(json);
列表=新列表();
foreach(字典f中的var item1)
{
Dictionary item2=(Dictionary)item1.Value;
list.Add(新名称(){
id=(int)项2[“id”],
名称=(字符串)项2[“名称”],
年龄=(int)项2[“年龄”]
});             
}

你想要的id、name和age属性之前的“3”和“59”是怎么回事?更可能的是
反序列化
-因为这不是一个列表/JSON数组,它是一个JSON对象,有两个属性,分别名为“3”和“59”。“3”和“59”我认为是从第三方返回的某种行id,“3”和“59”是怎么回事在您想要的id、name和age属性前面加上“59”?更可能是反序列化的
-因为这不是一个列表/JSON数组,它是一个JSON对象,有两个属性,分别命名为“3”和“59”。“3”和“59”我认为是从第三方返回的某种行id