有没有办法使用 Newtonsoft 将编号 JSON 字段反序列化为 C# List 字段?
Is there a way to deserialize numbered JSON fields to a C# List field using Newtonsoft?
示例JSON:
{
"name": "John Smith",
"pet1_name": "Fido",
"pet2_name": "Fluffy",
"pet3_name": "Killer"
}
我正在寻找的是使用 Newtonsoft 将其反序列化为如下所示的对象的最简单方法:
public class Person {
public string Name { get; set; }
public List<string> PetNames { get; set; }
}
如果可能的话,我最好避免创建名为“Pet1Name”、“Pet2Name”等的单独属性,并在反序列化后将它们组合到一个列表中。
您可以使用 json 解析方法
var jasonObject=JObject.Parse(json);
var person = new Person
{
Name = (string)jsonObject["name"],
PetNames = jsonObject.Properties().Where(p => p.Name != "name").Select(p => (string)p.Value).ToList()
};
或者您可以使用 json 反序列化方法(不像前一个那样灵活和快速)
var result = JsonConvert.DeserializeObject<JsonPerson>(json);
var person = new Person {Name=result.Name,
PetNames=result.PetNamesExt?.Values.Select(x=>x.ToString()).ToList()};
类
public class Person
{
public string Name { get; set; }
[JsonIgnore]
public List<string> PetNames {get; set;}
}
public class JsonPerson : Person
{
[JsonExtensionData]
public Dictionary<string, object> PetNamesExt { get; set; }
}
输出
{
"Name": "John Smith",
"PetNames": [
"Fido",
"Fluffy",
"Killer"
]
}
您可以通过添加 Dictionary<string,object>
类型的 属性 并用 [JsonExtensionData]
属性修饰来反序列化 Json。然后,您可以使 PetNames
属性 从字典中获取值。例如,
public class Person
{
public string Name { get; set; }
public List<string> PetNames => PetNamesDictionary?.Values.Select(x=>x.ToString()).ToList();
[JsonExtensionData]
public Dictionary<string,object> PetNamesDictionary{get;set;}
}
var result = JsonConvert.DeserializeObject<Person>(json);
输出
示例JSON:
{
"name": "John Smith",
"pet1_name": "Fido",
"pet2_name": "Fluffy",
"pet3_name": "Killer"
}
我正在寻找的是使用 Newtonsoft 将其反序列化为如下所示的对象的最简单方法:
public class Person {
public string Name { get; set; }
public List<string> PetNames { get; set; }
}
如果可能的话,我最好避免创建名为“Pet1Name”、“Pet2Name”等的单独属性,并在反序列化后将它们组合到一个列表中。
您可以使用 json 解析方法
var jasonObject=JObject.Parse(json);
var person = new Person
{
Name = (string)jsonObject["name"],
PetNames = jsonObject.Properties().Where(p => p.Name != "name").Select(p => (string)p.Value).ToList()
};
或者您可以使用 json 反序列化方法(不像前一个那样灵活和快速)
var result = JsonConvert.DeserializeObject<JsonPerson>(json);
var person = new Person {Name=result.Name,
PetNames=result.PetNamesExt?.Values.Select(x=>x.ToString()).ToList()};
类
public class Person
{
public string Name { get; set; }
[JsonIgnore]
public List<string> PetNames {get; set;}
}
public class JsonPerson : Person
{
[JsonExtensionData]
public Dictionary<string, object> PetNamesExt { get; set; }
}
输出
{
"Name": "John Smith",
"PetNames": [
"Fido",
"Fluffy",
"Killer"
]
}
您可以通过添加 Dictionary<string,object>
类型的 属性 并用 [JsonExtensionData]
属性修饰来反序列化 Json。然后,您可以使 PetNames
属性 从字典中获取值。例如,
public class Person
{
public string Name { get; set; }
public List<string> PetNames => PetNamesDictionary?.Values.Select(x=>x.ToString()).ToList();
[JsonExtensionData]
public Dictionary<string,object> PetNamesDictionary{get;set;}
}
var result = JsonConvert.DeserializeObject<Person>(json);
输出