Я хочу преобразовать строку 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
.
Как вы хотели бы представлять MyOtherClass в виде строки? –
@BenRobinson, чтобы быть откровенным, я не знаю. Я хочу сериализовать и десериализировать его. Есть ли способ, например, некоторые интерфейсы, которые мне нужно реализовать, чтобы они работали? – Anonymous
Я не могу поделиться своим кодом, но вам действительно нужно посмотреть Json.NET. Он полностью поддерживает парсинг json так, как вы описали. – code4life