C#/ JSON中的动态字段名称

时间:2015-03-19 20:33:53

标签: c# .net json serialization web

我正在开发一个C#Web应用程序。用户可以指定一组用户名,在本例中为“fred”和“george”,单击一个按钮,服务器将发回以下JSON:

{
    "fred": {
        "id": 4249458,
        "name": "fred",
    },
    "george": {
        "id": 3279659,
        "name": "george",
    }
}

然后将其成功加载到字符串中。

问题是字段名称“fred”和“george”是动态的,可以有任意数量。 DataContractJsonSerializer似乎无法管理它,因为它需要在数据协定中对字段名称进行硬编码。

this thread描述了同样的问题。答案建议使用JavaScriptSerializer,并使用dynamic类型来表示包含所有动态命名字段的“Children”属性。我正在使用的JSON中的“Children”实际上是顶级对象,所以我想我可以将整个JSON字符串加载到动态变量中(使用另一个中定义的kevin的FromJavaScriptSerializer函数线程):

public static T FromJavaScriptSerializer<T>(string json)
{
    var serializer = new JavaScriptSerializer();
    return serializer.Deserialize<T>(json);
}


public static string ToStringOutput(object dynamicField)
{
    var serializer = new JavaScriptSerializer();
    return serializer.Serialize(dynamicField);
}

dynamic varPlayer = FromJavaScriptSerializer<PlayerList>(jsonString);

而是返回一个空对象(使用ToStringOutput打印时,它只是“{}”)。

如何处理此问题?

1 个答案:

答案 0 :(得分:0)

按照惯例,我几分钟后回答了自己的问题。 :(

问题是这一行: dynamic varPlayer = FromJavaScriptSerializer<PlayerList>(jsonString);

我应该将PlayerList替换为dynamic