反序列化问题
本帖最后由 c_hello_world 于 2013-07-07 21:11:20 编辑 我用下面一段代码对JSON数据进行反序列化:
public MainPage()
{
InitializeComponent();
StreamResourceInfo stream = App.GetResourceStream(new Uri("Resources/heropediadata.json", UriKind.Relative));
StreamReader reader = new StreamReader(stream.Stream);
string content = Regex.Unescape(reader.ReadToEnd());
List<ItemDataModel> itemData = UtilityJsonHelper.JsonString2Obeject<List<ItemDataModel>>(content);
}
结果报错了,求分析错误原因,并提供解决思路或者方案?
PS:
1:heropediadata.json的文件可以从
http://www.dota2.com/jsfeed/heropediadata?feeds=itemdata
这个URL获取。
2:报错提示为:Unexpected character encountered in JSON. Expected ',', got 'a'. (389):
3:ItemDataModel为
[DataContract]
public class ItemDataModel
{
//物品ID
[DataMember(Name="id")]
public int ItemId { get; set; }
//物品名称
[DataMember(Name = "dname")]
public string ItemName { get; set; }
//物品图片
[DataMember(Name = "img")]
public string ItemPicName { get; set; }
//暂定??
[DataMember(Name = "qual")]
public string ItemComponent { get; set; }
//物品价格
[DataMember(Name = "cost")]
public int ItemCost { get; set; }
//物品描述
[DataMember(Name = "desc")]
public string ItemDesc { get; set; }
//物品属性
[DataMember(Name = "attrib")]
public string ItemAttrib { get; set; }
//物品耗蓝
[DataMember(Name = "mc")]
public string ItemMC { get; set; }
//物品冷却CD
[DataMember(Name = "cd")]
public int ItemCd { get; set; }
//物品传说(背景故事)
[DataMember(Name = "lore")]
public string ItemLore { get; set; }
//合成组建
[DataMember(Name = "components")]
public List<string> ItemComponents { get; set; }
//暂定
[DataMember(Name = "created")]
public bool ItemIsCreated { get; set; }
}
UtilityJsonHelper类用到的部分代码为:
public class UtilityJsonHelper
{
/// <summary>
/// Json字符串转化为Object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonstring"></param>
/// <returns></returns>
public static T JsonString2Obeject<T>(string jsonstring)
{
using(MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonstring)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(stream);
}
}
}
4:个人目前推测的问题根源为JSON原文件格式错误,JSON源文件的部分()应该改为[]?
[解决办法]
不想看代码 嘻嘻
但还是提供思路的, 就是序列号很反序列化一定要对称
就像加密算法一样
还是使用下面这个组件来吧
Newtonsoft.Json
[解决办法]
json数据本身有问题哦
[解决办法]
从报错的信息来看,应该是源数据格式有问题,某个地方少了个逗号。找个JSON查看器试试就可以了。
[解决办法]
先用序列化看结果格式,然后按照格式调整,再反序列化