Handling extra members when deserializing with Json.net

回眸只為那壹抹淺笑 提交于 2019-12-14 04:16:19

问题


Suppose I want to deserialize a set of Json data into a Person object.

class Person
{
    [DataMember]
    string name;
    [DataMember]
    int age;
    [DataMember]
    int height;

    object unused;
}

But if I have the Json data like the one below:

{
    "name":"Chris",
    "age":100,
    "birthplace":"UK",
    "height":170,
    "birthdate":"08/08/1913",
}

The fields "birthdate" and "birthplace" are not part of the Person class. But I still want to retain those fields, so is it possible to use Json.net or other libraries that can store those extra fields into one of the fields of Person such as "unused" as declared above?


回答1:


You should be able to use the [JsonExtensionData] attribute for this: http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings-and-extension-data

void Main()
{
    var str = "{\r\n    \"name\":\"Chris\",\r\n    \"age\":100,\r\n    \"birthplace\":\"UK\",\r\n    \"height\":170," +
    "\r\n    \"birthdate\":\"08/08/1913\",\r\n}";
    var person = JsonConvert.DeserializeObject<Person>(str);
    Console.WriteLine(person.name);
    Console.WriteLine(person.other["birthplace"]);
}

class Person
{
    public string name;
    public int age;
    public int height;
    [JsonExtensionData]
    public IDictionary<string, object> other;
}



回答2:


Yes,you can do it with JSON.NET:

dynamic dycperson= JsonConvert.DeserializeObject(@"{
'name':'Chris',
'age':100,
'birthplace':'UK',
'height':170,
'birthdate':'08/08/1913'}");
Person person = new Person{
  name = dycperson.name,
  age=dycperson.age,
  height=dycperson.height,
  unused= new {birthplace = dycperson.birthplace, birthdate=dycperson.birthdate}
};


来源:https://stackoverflow.com/questions/25395765/handling-extra-members-when-deserializing-with-json-net

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!