У меня есть веб-сервис, возвращающий данные json. У меня нет контроля над сгенерированным json на стороне сервера.
Я десериализую json следующим образом:
JsonConvert.DeserializeObject<OuterObject>(jsonString);
Проблема в том, что есть встроенные внутренние объекты (с большим количеством вложенных внутренних объектов). Я не заинтересован в моделировании их в моем приложении.
Json-данные выглядят так:
{
id : "xyz",
name : "Some Object",
properties : {
prop_1 : "foo",
prop_2 : "bar"
},
inner_object : {
id : "abc$1",
name : "Inner Object Name",
....
// a whole lot of stuff here
// with more embedded objects
....
}
}
Я хотел бы смоделировать внешний объект как простой POCO, где на внутренний объект ссылается только идентификатор (String), а не ссылка на объект.
public class Outer
{
public String Id { get; internal set; }
public String Name { get; internal set; }
public Dictionary<String,String> Properties { get; internal set; }
// Just keep the InnerObject Id, no real reference to an instance
public String InnerObjectId { get; set; }
}
Я думаю, я мог бы написать версию JsonOuterObject со ссылкой на реальный объект для JsonInnerObject и создать оттуда мой реальный OuterObject, отбрасывая впоследствии другие объекты ... но это слишком хромо. (Я не хочу видеть свое имя рядом с таким коммитом)
Итак, сейчас я играю с Json.NET IContractResolver (переопределяя DefaultContractResolver), но похоже, что мне предстоит долгая поездка.
Мне не хватает какой-то очевидной функции Json.NET, которая позаботится об этом здесь?
Или, может быть, какие-то указатели, какие методы IContractResolver здесь интересны?
EDIT: POJO в .NET — это POCO.