问题
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