假设我们有以下JSON:
{
"a": 10,
"b": "foo",
"c": 30,
"d": "bar",
}
和C#类:
class Stuff
{
public int A { get; set; }
public string B { get; set; }
public JObject Others { get; set; }
}
是否有一种简单的方法可以使用A
和B
的值填充成员a
和b
以及c
的值,将JSON反序列化。 {1}}和d
作为Others
JObject中的JProperties?
答案 0 :(得分:1)
您需要为此实施JsonConverter。它在自定义反序列化方面提供了充分的灵活性。
使用JsonReader实现您的ReadJson方法遍历输入JSON,并将其值映射到适当的目标属性。
有关完整示例,请参阅here。
答案 1 :(得分:1)
是的,您可以使用Json.Net的“扩展数据”功能轻松完成此操作。您只需要使用Others
属性标记[JsonExtensionData]
属性,它应该按照您想要的方式工作。
class Stuff
{
public int A { get; set; }
public string B { get; set; }
[JsonExtensionData]
public JObject Others { get; set; }
}
演示:
class Program
{
static void Main(string[] args)
{
string json = @"
{
""a"": 10,
""b"": ""foo"",
""c"": 30,
""d"": ""bar"",
}";
var stuff = JsonConvert.DeserializeObject<Stuff>(json);
Console.WriteLine(stuff.A);
Console.WriteLine(stuff.B);
Console.WriteLine(stuff.Others["c"]);
Console.WriteLine(stuff.Others["d"]);
}
}
输出:
10
foo
30
bar