2014-12-11 3 views
2

Я хочу преобразовать строку json в NameValueCollection. Я придумал код ниже.Как преобразовать строку json (сложный объект) в NameValueCollection?

public static NameValueCollection ConvertFromJson(string json) 
{ 
    var anonymous = JContainer.Parse(json);   

    var nvc = new NameValueCollection(); 
    var dict = new RouteValueDictionary(anonymous); 

    foreach (var kvp in dict) 
    { 
     if (kvp.Value == null) 
     { 
      // I am OK if a property is null. Just skip it. 
      continue; 
     } 

     if (kvp.Value.GetType().Name.Contains("Anonymous")) 
     { 
      var prefix = kvp.Key + "."; 
      foreach (var innerkvp in new RouteValueDictionary(kvp.Value)) 
      { 
       nvc.Add(prefix + innerkvp.Key, innerkvp.Value.ToString()); 
      } 
     } 
     else 
     { 
      nvc.Add(kvp.Key, kvp.Value.ToString()); 
     } 
    } 

    return nvc; 
} 

Он хорошо работает с обычными классами, но не вложенными классами. Например, он работает с class A, но не class B.

class A 
{ 
    public string AAA { get; set; } 
    public int BBB { get; set; } 
} 

class B 
{ 
    public string AAA { get; set; } 
    public MyOtherClass BBB { get; set; } 
} 

Как преобразовать вложенные объекты в NameValueCollection?

Объяснить
Этот вопрос абсолютно не дублировать с How to convert json to NameValueCollection. Ответ в этом вопросе работает только с class A, но он не работает с class B.

+0

Как вы хотели бы представлять MyOtherClass в виде строки? –

+0

@BenRobinson, чтобы быть откровенным, я не знаю. Я хочу сериализовать и десериализировать его. Есть ли способ, например, некоторые интерфейсы, которые мне нужно реализовать, чтобы они работали? – Anonymous

+0

Я не могу поделиться своим кодом, но вам действительно нужно посмотреть Json.NET. Он полностью поддерживает парсинг json так, как вы описали. – code4life

ответ

0

Если вы только whant сериализация/deserialise вложенный объект, как вы делилась на вопрос, который вы могли бы использовать работу вокруг так:

Dictionary <string, object> deserializedresult = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);

Единственная проблема с этим, что вам нужно сериализация и десриализовать снова вложенные объекты или использовать отражение, чтобы достичь содержащихся элементов вложенных объектов.

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