读书人

反序列化有关问题

发布时间: 2013-07-11 15:38:46 作者: rapoo

反序列化问题
本帖最后由 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查看器试试就可以了。

[解决办法]
先用序列化看结果格式,然后按照格式调整,再反序列化

读书人网 >C#

热点推荐