【发布时间】:2013-08-14 13:24:50
【问题描述】:
我有一个从中接收数据的 API。该 API 无法控制它的结构,我需要序列化和反序列化 JSON 输出以将数据映射到我的模型。
如果 JSON 具有良好的命名属性格式,则一切正常。
如果没有命名值而只有一个整数和字符串数组,你能做什么?比如在位置
这是 JSON 的示例:
{"id":"2160336","activation_date":"2013-08-01","expiration_date":"2013-08-29","title":"Practice Manager","locations":{"103":"Cambridge","107":"London"}}
我有类似的模型:
public class ItemResults
{
public int Id { get; set; }
public DateTime Activation_Date { get; set; }
public DateTime Expiration_Date{ get; set; }
public string Title { get; set; }
public Location Locations { get; set; }
}
public class Location
{
public int Id { get; set; }
public string value { get; set; }
}
我正在使用内置的 ajax 序列化进行映射:
protected T MapRawApiResponseTo<T>( string response )
{
if ( string.IsNullOrEmpty( response ) )
{
return default( T );
}
var serialize = new JavaScriptSerializer();
return serialize.Deserialize<T>( response );
}
var results = MapRawApiResponseTo<ItemResults>(rawApiResponse);
因此,ID 和所有其他属性都被拾取并映射,但我所做的每一件事似乎都无法映射位置。
非常感谢
【问题讨论】:
-
ItemResults类中的字段不应该是一个集合并命名为复数吗?例如public IEnumerable<Location> Locations { get; set; } -
与许多涉及
JavaScriptSerializer的JSON问题一样,任何答案的第一部分通常应该是“停止使用JavaScriptSerializer”;抱歉,但对于任何不重要的事情,Json.NET 做得好多 更好 -
删除了我的答案,因为格式不好,但这是一个有用的网站,可以查看如何构建您的课程:json2csharp.com
标签: c# serialization deserialization