2015-01-01 2 views
0

У меня есть JSon файл:Newtonsoft JSON десериализации - ключ как свойство

... 
    "Key1": { 
     "Base": 123, 
     "Max": 1234 
    }, 
    "Key2": { 
     "Base": 123, 
     "Max": 1234 
    }, 
    "Key3": { 
     "Base": 123, 
     "Max": 1234 
    }, 
... 

мне нужно десериализации его в объект с JsonConvert.DeserializeObject<T>(__json);

Но мне нужно использовать ключи (Key1, Key2, ключ3 , ...) как свойство моего десериализованного объекта. К сожалению, я не могу использовать альтернативный метод десериализации, и я не могу изменить формат json.

Мой объект как что

public class Item { 
    public string Id { get; set; } 
    public int Base { get; set; } 
    public int Max { get; set; } 
} 

My Id должен быть "Key1", «Key2 ...

возможно

+0

почему не список обычая класса '' Key' с Base' и 'свойств Max'? вы можете перечислить через каждое свойство 'Key', используя цикл – trashr0x

+0

Да, насколько я знаю, единственный способ сделать это - использовать подход, основанный на использовании. Это не так уж плохо, но я не думаю, что есть что-то встроенное, которое это сделает. –

+0

Реальный объект более сложный и имеет некоторые атрибуты OnDeserialization для под-объектов, а ключ (enum) используется для вычисления некоторых данных. Я использую большую платформу, которая десериализует из автоматически сгенерированных файлов, и я не могу изменить процесс десериализации или json. , но я могу добавить JsonConverter, ContractResolver, CustomConverter, атрибут или любую другую подобную вещь, но я могу только обновить свой класс. – Demonia

ответ

2

сделать пользовательский класс Key:

public class Key { 
    public int Base { get; set; } 
    public int Max { get; set; } 
} 

Затем сохраните каждый элемент в результате JSON в Dictionary, где это ключ имя ключа и его значение является Key пункт:

var keyCollection = new Dictionary<string, Key>(); 

//you can then do stuff such as: 
var maxOfKeyOne = keyCollection["Key1"].Max; 
var baseOfKeyTwo = keyCollection["Key2"].Base; 
+0

Наконец я использовал словарь и построил свои под-объекты с помощью метода OnDeserialized, спасибо. – Demonia

Смежные вопросы