2014-10-22 10 views
3

Я хочу десериализации JSON к следующему классуDeserialize JSON в словарь

public class Config 
{ 
    public String Name { get; set; } 
    public SSOType Type { get; set; } 
    public Dictionary<String, String> Configuration { get; set; } 
} 

Таким образом, два свойства будут десериализации «как обычно», а остальные будут проталкивается в словарь.

JsonConvert.DeserializeObject<Config>(filetext); 

Это запихивает ДАННЫЕ для свойств Name и Type, но словарь остается пустым ...

Я предполагаю, что будет выглядеть JSON как

{ 
    "name":"something", 
    "type":"something", 
    "configuration":{ 
     "thing1":"value", 
     "thing2":"value", 
     "thing3":"value" 
      } 
} 

, но я хотел бы, чтобы в JSON как

{ 
    "name":"something", 
    "type":"something", 
    "thing1":"value", 
    "thing2":"value", 
    "thing3":"value" 
} 

Как настроить десериализацию, чтобы она работала?

+0

Отредактировано для добавления дополнительных вещей –

ответ

0

Будет ли это работать?

public class Config : Dictionary<string, string> 
{ 
    public String Name { get; set; } 
    public SSOType Type { get; set; } 
} 
+0

Свойства будут игнорироваться, iirc. – Athari

+0

Да, ты прав. Похоже, что это способ включить эти свойства - http://stackoverflow.com/a/14894945/906690 – peaceoutside

0

Ваши варианты:

  1. JsonExtensionDataAttribute на словаря, который получит все данные, для которых свойства не найдены, и OnDesrialized обратного вызова для преобразования словаря в формат вам нужно:

    public class Config 
    { 
        public String Name { get; set; } 
    
        [JsonIgnore] 
        public Dictionary<string, string> Configuation { get; set; } 
    
        [JsonExtensionData] 
        private Dictionary<string, JToken> _configuration; 
    
        [OnDeserialized] 
        private void Deserialized (StreamingContext context) 
        { 
         Configuation = _configuration.ToDictionary(i => i.Key, i => (string)i.Value); 
        } 
    } 
    
  2. Пользовательский JsonConverter который прочитает JSON DOM и преобразует его в ваш класс. Вы можете найти много примеров в StackOverflow.

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