【发布时间】:2024-01-09 22:40:01
【问题描述】:
我在这里发现了同样的问题...
Deserializing nested JSON structure to a flattened class with Json.NET using annotations
...但没有正确的答案。 最好的建议之一是将嵌套对象包装在一个新类中,但这种方法引入了另一个问题:乐高名称。在我的示例中,此类的大多数逻辑名称与父类和当然是不可能的。我的例子很简单,我只是想去掉父类中的“语言”属性。有人可以帮我做吗?
using Newtonsoft.Json;
public partial class NamedType
{
public string Name { get; set; }
}
public class Proficiency
{
public string Level { get; set; }
public string Name { get; set; }
}
public class Language
{
public int Id { get; set; }
public string Name { get; set; }
//public Language Language { get; set; } //Compiler error
//public Language Value { get; set; } //Not correct
//public NamedType Language { get; set; } //Compiler error
//public NamedType Value { get; set; } //Ugly, isn't?
public Proficiency Proficiency { get; set; }
}
List<Language> languageList = JsonConvert.DeserializeObject<List<Language>>(json);
json 示例:
{
"languages": [
{
"id": 1,
"language": { "name": "Spanish" },
"proficiency": {
"level": "native_or_bilingual",
"name": "Native or bilingual proficiency"
}
},
{
"id": 2,
"language": { "name": "English" },
"proficiency": {
"level": "full_professional",
"name": "Full professional proficiency"
}
},
{
"id": 3,
"language": { "name": "Japanese" },
"proficiency": {
"level": "elementary",
"name": "Elementary proficiency"
}
}
]
}
【问题讨论】:
-
“乐高”这个名字是什么意思?
-
“语言”不适合作为“语言”类型实例的属性。相反,直接从实例访问的“名称”属性更自然。 var language = new Language() { Id = 1, Laguage = new NamedType() { name = "English" } }; vs. var language = new Language() { Id = 1, Name = "English" };
标签: json json.net deserialization