摘要 : 如何将 JSON 数据中的字段名映射到。使用 JavaScriptSerializer 时的 Net 对象。反序列化?
较长版本 : 我有以下来自服务器 API 的 JSON 数据(未在.Net 中编码)
{"user_id":1234, "detail_level":"low"}
我为它提供了下面的 C # 对象:
[Serializable]
public class DataObject
{
[XmlElement("user_id")]
public int UserId { get; set; }
[XmlElement("detail_level")]
public DetailLevel DetailLevel { get; set; }
}
其中 DetailLevel 是一个枚举,其值之一为“ Low”。
这项测试失败了:
[TestMethod]
public void DataObjectSimpleParseTest()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
DataObject dataObject = serializer.Deserialize<DataObject>(JsonData);
Assert.IsNotNull(dataObject);
Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel);
Assert.AreEqual(1234, dataObject.UserId);
}
最后两个断言失败,因为这些字段中没有数据。如果将 JSON 数据更改为
{"userid":1234, "detaillevel":"low"}
然后就过去了。但是我不能改变服务器的行为,而且我希望客户机类在 C # 语言中具有命名良好的属性。我不能使用 LINQtoJSON,因为我希望它在 Silverlight 之外工作。看起来 XmlElement 标记没有任何效果。我不知道我从哪里得到的想法,他们是相关的,所有,他们可能不是。
如何在 JavaScriptSerializer 中进行字段名映射? 能做到吗?