我可以反序列化到一个类并有额外的JSON属性进入该类的JObject吗?

时间:2014-11-30 15:22:30

标签: c# json json.net

假设我们有以下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; }
}

是否有一种简单的方法可以使用AB的值填充成员ab以及c的值,将JSON反序列化。 {1}}和d作为Others JObject中的JProperties?

2 个答案:

答案 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

小提琴:https://dotnetfiddle.net/6UVvFI