C# 我是否可以反序列化到一个类,并将额外的JSON属性放入该类的JObject中?
假设我们有以下JSON: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的“
{
"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