Учитывая следующий результат json: По умолчанию json result имеет известный набор полей:
{
"id": "7908",
"name": "product name"
}
Но может быть расширен с дополнительными полями (в этом примере _unknown_field_name_1
и _unknown_field_name_2
), имена которых неизвестны при запросе результата.
{
"id": "7908",
"name": "product name",
"_unknown_field_name_1": "some value",
"_unknown_field_name_2": "some value"
}
Я хотел бы, чтобы результат json был сериализован и десериализован в класс и с классом со свойствами для известных полей и сопоставил неизвестные поля (для которых нет свойств) к свойству (или нескольким свойствам), как словарь, поэтому они могут быть доступны и изменены.
public class Product
{
public string id { get; set; }
public string name { get; set; }
public Dictionary<string, string> fields { get; set; }
}
Я думаю, мне нужен способ подключиться к сериализатору json и сделать сопоставление для отсутствующих элементов (как для сериализации, так и для десериализации). Я рассматривал различные возможности:
- json.net и пользовательские разрешители контрактов (не могу понять, как это сделать)
- datacontract serializer (может только переопределять onserialized, onserializing)
- сериализуем динамику и выполняем настраиваемое сопоставление (это может работать, но, похоже, много работы)
- пусть продукт наследуется от DynamicObject (сериализаторы работают с отражением и не вызывают методы trygetmember и trysetmember)
Я использую restsharp, но любой сериализатор может быть подключен.
О, и я не могу изменить результат json, а this или не помог мне либо.
Update: Это больше похоже на: http://geekswithblogs.net/DavidHoerster/archive/2011/07/26/json.net-custom-convertersndasha-quick-tour.aspx