Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以反序列化到一个类,并将额外的JSON属性放入该类的JObject中?_C#_Json_Json.net - Fatal编程技术网

C# 我是否可以反序列化到一个类,并将额外的JSON属性放入该类的JObject中?

C# 我是否可以反序列化到一个类,并将额外的JSON属性放入该类的JObject中?,c#,json,json.net,C#,Json,Json.net,假设我们有以下JSON: { "a": 10, "b": "foo", "c": 30, "d": "bar", } 还有C级: 有没有一种简单的方法可以让上面JSON的反序列化用A和B的值填充成员A和B并将c和d的值作为JProperty放在其他作业对象中?为此您需要实现一个属性。它在自定义反序列化方面提供了充分的灵活性 使用JsonReader实现您的方法来遍历输入JSON,并将其值映射到适当的目标属性 请参阅完整示例。是的,您可以使用Json.Net的“

假设我们有以下JSON:

{ 
    "a": 10,
    "b": "foo",
    "c": 30,
    "d": "bar",
}
还有C级:


有没有一种简单的方法可以让上面JSON的反序列化用
A
B
的值填充成员
A
B
并将
c
d
的值作为JProperty放在
其他
作业对象中?

为此您需要实现一个属性。它在自定义反序列化方面提供了充分的灵活性

使用JsonReader实现您的方法来遍历输入JSON,并将其值映射到适当的目标属性


请参阅完整示例。

是的,您可以使用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"]);
    }
}

小提琴手:

我的+1回答得很好。如果你在问题本身中包含一个例子,你仍然可以将此转化为一个优秀的答案-有时链接会中断(当外部内容不再存在时),但答案本身中的例子总是永恒的。谢谢,实际上我发现已经有了解决方案和实现,所以我把这个问题标记为重复的。可能重复的
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