[英]JSON serialize and deserialize C# with Partial objects
这是我要寻找的最终 JSON 对象 -
{
"firstName": "John",
"lastName": "Smith",
"age": 27,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100" <-- Added by my application
}
}
在这个例子中,我不拥有名字、姓氏和地址的某些部分。 我的逻辑部分只需要注入年龄和地址。 有没有办法不复制我身边的整个对象? 我可以拥有一个这样的对象吗?
public class AdditionalAddressInfo
{
public string postalCode { get; set; }
}
public class AdditionalUserInfo
{
public int age { get; set; }
}
有没有办法将其序列化并添加到传入的 JSON。
您可以使用DynamicObject
进行部分反序列化,这样您就不需要了解其他属性:
var jsonString = @"{
""firstName"": ""John"",
""lastName"": ""Smith"",
""address"": {
""streetAddress"": ""21 2nd Street"",
""city"": ""New York"",
""state"": ""NY"",
}
}";
dynamic dynoObject = JsonConvert.DeserializeObject<dynamic>(jsonString);
//adding age
AdditionalUserInfo additionalUserInfo = new AdditionalUserInfo();
additionalUserInfo.age = 27;
dynoObject.age = additionalUserInfo.age;
//adding postalCode
AdditionalAddressInfo additionalAddressInfo = new AdditionalAddressInfo();
additionalAddressInfo.postalCode = "10021 - 3100";
dynoObject.address.postalCode = additionalAddressInfo.postalCode;
var newJson = JsonConvert.SerializeObject(dynoObject);
然后新的 Json 将如预期的那样:
{
"firstName": "John",
"lastName": "Smith",
"age": 27,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
}
}
您可以通过修改 JObject 将新值直接添加到 Json。 例如,
var jObj = JObject.Parse(json);
var address = jObj["address"] as JObject;
address.Add("postalCode","10021-3100");
jObj.Add("age",27);
var result = jObj.ToString();
输出
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
},
"age": 27
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.