【问题标题】:Convert JS object with a list to C# list将带有列表的 JS 对象转换为 C# 列表
【发布时间】:2018-01-24 22:32:03
【问题描述】:

我的客户正在向我发送这样的对象:

"content": {
    "title": "data title",
    "values": {
        "25": "some description",
        "26": "some info",
        "27": "some text",
        "28": "some other data",
        "29": "more info",
        "30": "more text",
        "31": "and another more description"
    }
}

我需要将 values 保存在 C# List<> 对象上。 我正在尝试像这样获取和保存这些值:

public static List<MyKeyValuePair> GetClientValues(dynamic content)
{
    var myList = new List<MyKeyValuePair>();

    try
    {
        foreach (PropertyInfo pi in content.values.GetType().GetProperties())
        {
            var value = "";
            myList.Add(new MyKeyValuePair() { Id = int.Parse(pi.Name), Description = pi.GetValue(value, null).ToString() });
        }
    }
    catch { }   

    return myList;
}

但是在foreach 行我收到了这个错误信息:

'System.Collections.Generic.Dictionary.values' 是 由于其保护级别而无法访问

我该如何解决这个问题?

【问题讨论】:

    标签: javascript c# json parsing dynamic


    【解决方案1】:

    如果动态已经输入,您应该可以执行以下操作:

    public static List<MyKeyValuePair> GetClientValues(dynamic content)
    {
        var myList = new List<MyKeyValuePair>();
    
        foreach (var kv in content["values"])
        {
            myList.Add(new MyKeyValuePair {
                Id = int.Parse(kv.Key),
                Description = kv.Value
            });
        }
    
        return myList;
    }
    

    否则,您可能需要反序列化输入的 json 字符串。

    【讨论】:

    • 谢谢@styfle!使用该代码,我也收到了相同的错误消息,但我将foreach 行更改为foreach (var kv in content["values"]),现在它可以完美运行了。非常感谢
    【解决方案2】:

    如果您使用的是 Visual Studio 2013 及更高版本,您可以复制此 json 并在编辑菜单下使用粘贴 json 作为类从中生成一个类,但是如果您使用的是较低版本的 VS,您仍然可以输入类结构,然后下一步是使用 newtonsoft json 将 json 反序列化为上面创建的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多