如何将Json数组转换为C#中的对象列表

我有如下的Json字符串

 {

"JsonValues":{

"id": "MyID",

"values": {

"value1":{

"id": "100",

"diaplayName": "MyValue1"

},

"value2":{

"id": "200",

"diaplayName": "MyValue2"

}

}

}

}

我想将Json字符串转换为以下类

  class ValueSet

{

[JsonProperty("id")]

public string id

{

get;

set;

}

[JsonProperty("values")]

public List<Value> values

{

get;

set;

}

}

class Value

{

public string id

{

get;

set;

}

public string DiaplayName

{

get;

set;

}

}

我的反序列化代码是

JavaScriptSerializer js = new JavaScriptSerializer();

StreamReader sr = new StreamReader(@"ValueSetJsonString.txt");

string jsonString = sr.ReadToEnd();

var items = JsonConvert.DeserializeObject<ValueSet>(jsonString);

但是我在序列化后得到空值,我该如何解决呢?

回答:

正如其他人已经指出的那样,未获得预期结果的原因是因为JSON与尝试反序列化的类结构不匹配。您需要更改JSON或更改类。由于其他人已经展示了如何更改JSON,因此在这里我将采用相反的方法。

为了与您在问题中发布的JSON相匹配,您的类应按照以下定义。注意,我进行了以下更改:

  1. Wrapper在您的JSON中添加了与外部对象相对应的类。
  2. 我改变了Values对财产ValueSet类从一个List<Value>Dictionary<string, Value>,因为values在你的JSON属性包含的对象,而不是一个数组。
  3. 我添加了一些其他[JsonProperty]属性来匹配JSON对象中的属性名称。

类定义:

class Wrapper

{

[JsonProperty("JsonValues")]

public ValueSet ValueSet { get; set; }

}

class ValueSet

{

[JsonProperty("id")]

public string Id { get; set; }

[JsonProperty("values")]

public Dictionary<string, Value> Values { get; set; }

}

class Value

{

[JsonProperty("id")]

public string Id { get; set; }

[JsonProperty("diaplayName")]

public string DisplayName { get; set; }

}

您需要反序列化到Wrapper类中,而不是在ValueSet类中。然后,您可以ValueSet从获取Wrapper

var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;

这是一个工作程序来演示:

class Program

{

static void Main(string[] args)

{

string jsonString = @"

{

""JsonValues"": {

""id"": ""MyID"",

""values"": {

""value1"": {

""id"": ""100"",

""diaplayName"": ""MyValue1""

},

""value2"": {

""id"": ""200"",

""diaplayName"": ""MyValue2""

}

}

}

}";

var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;

Console.WriteLine("id: " + valueSet.Id);

foreach (KeyValuePair<string, Value> kvp in valueSet.Values)

{

Console.WriteLine(kvp.Key + " id: " + kvp.Value.Id);

Console.WriteLine(kvp.Key + " name: " + kvp.Value.DisplayName);

}

}

}

这是输出:

id: MyID

value1 id: 100

value1 name: MyValue1

value2 id: 200

value2 name: MyValue2

以上是 如何将Json数组转换为C#中的对象列表 的全部内容, 来源链接: utcz.com/qa/406479.html

回到顶部