假设我们有以下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; }
}
有没有一种简单的方法可以使上述 JSON 的反序列化填充成员A
并使用 a
和 b
的值B
,并将 c
和 d
的值作为 JProperties 放入 Others
JObject 中?
是的,您可以使用 Json.Net 的"扩展数据"功能轻松完成此操作。 您只需要使用 [JsonExtensionData]
属性标记您的 Others
属性,它应该按照您想要的方式工作。
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
小提琴:https://dotnetfiddle.net/6UVvFI
你需要为此实现一个JsonConverter。它在自定义反序列化方面提供了充分的灵活性。
实现 ReadJson 方法以使用 JsonReader 遍历输入 JSON,并将其值映射到相应的目标属性。
有关完整示例,请参阅此处。