JSON.NET десериализует часть объекта JSON как словарь

это не дубликат JSON.NET: десериализация части объекта JSON в словарь

У меня есть JSON { "Количество" : 2, "Голова" : { "itemId":..., "качество":...}, "Ноги": { "itemId":..., "качество":. .. } }

Мне нужно десериализовать его в словарь: IDictionary<GearSlot, Item> Если я попытаюсь десериализовать весь JSON, я получу ошибку, потому что не удается десериализовать "Count:2" в <GearSlot, Item>.

GearSlot является перечислением и имеет более 17 значений. В это время я определил класс:

public class Items {
    property Item Head { get; set; }
    property Item Legs { get; set; }
    ...
}

это работает, но не элегантно и неуклюже.

Какие-либо предложения?


person THX-1138    schedule 09.09.2011    source источник


Ответы (2)


За этот ответ и этот ответ можно десериализовать частичный Фрагмент JSON, а затем повторно интегрировать.

var root = JObject.Parse(jsonString);
var serializer = new JsonSerializer();
var expectedResult = serializer.Deserialize<ExpectedType>(root["fragment"].CreateReader());

Итак, для вас

var items = new Items {
    Head = serializer.Deserialize<Item>(root["Head"])
    , Legs = serializer.Deserialize<Item>(root["Legs"])
};
person drzaus    schedule 25.01.2013

Вы можете попробовать использовать клиентский конвертер. Пример: http://weblogs.asp.net/thangchung/archive/2010/08/26/customizing-the-converter-for-json-net.aspx

person Mohamed Nuur    schedule 26.07.2012