我正在开发一个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
打印时,它只是“{}”)。
如何处理此问题?
答案 0 :(得分:0)
按照惯例,我几分钟后回答了自己的问题。 :(
问题是这一行:
dynamic varPlayer = FromJavaScriptSerializer<PlayerList>(jsonString);
我应该将PlayerList
替换为dynamic
。