Могу ли я пропустить поля при десериализации объекта JSON? - PullRequest
0 голосов
/ 25 мая 2011

Используя .NET DataContractJsonSerializer, я пытаюсь десериализовать объект JSON в класс, который я определил.
Однако у объекта, который я десериализую, больше полей, чем мне нужно.
Есть ли способзаставить его десериализовать только те поля, которые я указал в своем соответствующем классе?
Я пытаюсь избежать этого SerializationException:

Тип контракта данных 'xxx' не может быть десериализован, поскольку требуемые данныеэлемент 'yyy' не был найден.

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Так я исправляю большинство моих ошибок JSON в .NET.Я использую JSON.NET вместо встроенного.

http://json.codeplex.com/

Вот быстрый пример, бесстыдно взятый из их документов:

Product product = new Product();

product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string output = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": "\/Date(1230375600000+1300)\/",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);

Удачи.

0 голосов
/ 26 мая 2011

Возможно, вы захотите взглянуть на реализацию IExtensibleDataObject на ваших объектах наряду с включением ignoreExtensionDataObject .Свойство ignoreExtensionDataObject указывает, будут ли игнорироваться неизвестные данные при десериализации.

...