我有一些 JSON,想要将其反序列化为 C# 类的实例。但是,该类并不具有与原始 JSON 匹配的所有字段/属性。我希望能够修改类中的属性值,然后将其序列化回 JSON,并且原始 JSON 中的剩余字段和属性仍然完好无损。
例如,假设我有以下 JSON:
{
"name": "david",
"age": 100,
"sex": "M",
"address": "far far away"
}
我想将其反序列化到此类中:
class MyClass
{
public string name { get; set; }
public int age { get; set; }
}
反序列化后,我设置如下:
myClass.name = "John";
myClass.age = 200;
现在,我想将其序列化回 JSON 并得到以下结果:
{
"name": "John",
"age": 200,
"sex": "M",
"address": "far far away"
}
有没有办法使用 Json.Net 来做到这一点?
您可以使用 Json.Net 的“扩展数据”功能来处理此问题。
添加新的Dictionary<string, object>
属性到你的班级并用[JsonExtensionData]
属性。 (如果您不想影响类的公共接口,则可以将其设为私有属性。)反序列化时,该字典将填充与类的任何其他公共属性不匹配的任何数据。序列化时,字典中的数据将作为对象的属性写回 JSON。
class MyClass
{
public string name { get; set; }
public int age { get; set; }
[JsonExtensionData]
private Dictionary<string, object> otherStuff { get; set; }
}
这是一个演示:
class Program
{
static void Main(string[] args)
{
string json = @"
{
""name"": ""david"",
""age"": 100,
""sex"": ""M"",
""address"": ""far far away""
}";
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json);
Console.WriteLine("orig name: " + obj.name);
Console.WriteLine("orig age: " + obj.age);
Console.WriteLine();
obj.name = "john";
obj.age = 200;
json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Console.WriteLine(json);
}
}
Output:
orig name: david
orig age: 100
{
"name": "john",
"age": 200,
"sex": "M",
"address": "far far away"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)