JSON сериализация и десериализация C# с частичными объектами - PullRequest
0 голосов
/ 25 февраля 2020

Это последний JSON объект, который я ищу -

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",      
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"         <-- Added by my application
  }
}

В этом примере у меня нет firstName, lastName и некоторой части адреса. Моя часть логики c просто нуждается в указании возраста и адреса. Есть ли способ не дублировать весь объект на моей стороне? Могу ли я просто иметь такой объект -

public class AdditionalAddressInfo
{
    public string postalCode { get; set; }
}

public class AdditionalUserInfo
{
    public int age { get; set; }
}

Есть ли способ сериализовать это и добавить к входящему JSON.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вы можете напрямую добавить новые значения в Json, изменив JObject. Например,

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
}
0 голосов
/ 25 февраля 2020

Вы можете использовать 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"       
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...