【问题标题】:How can I convert json string (complex object) to NameValueCollection?如何将 json 字符串(复杂对象)转换为 NameValueCollection?
【发布时间】:2014-12-11 10:34:53
【问题描述】:

我想将一个 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 坦率地说,我不知道。我想序列化和反序列化它。有没有办法,例如,我需要实现一些接口才能使其工作?
  • 我不能分享我的代码,但你真的需要看看 Json.NET。它完全支持按照您描述的方式解析 json。
  • @code4life 谢谢。我现在正在调查。
  • @code4life 你的意思是 JsonConvert 吗?如果是这样,它不适用于我遇到的问题。

标签: c# asp.net .net json


【解决方案1】:

如果您只想序列化/反序列化嵌套对象,就像您在问题上分享的那样,您可以使用这样的解决方法:

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

唯一的问题是您需要再次序列化和反序列化嵌套对象或使用反射来访问嵌套对象的包含元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2018-06-28
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多