如何将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相匹配,您的类应按照以下定义。注意,我进行了以下更改:
- 我
Wrapper
在您的JSON中添加了与外部对象相对应的类。 - 我改变了
Values
对财产ValueSet
类从一个List<Value>
到Dictionary<string, Value>
,因为values
在你的JSON属性包含的对象,而不是一个数组。 - 我添加了一些其他
[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: MyIDvalue1 id: 100
value1 name: MyValue1
value2 id: 200
value2 name: MyValue2
以上是 如何将Json数组转换为C#中的对象列表 的全部内容, 来源链接: utcz.com/qa/406479.html