首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

反序列化有关问题

2013-07-11 
反序列化问题本帖最后由 c_hello_world 于 2013-07-07 21:11:20 编辑我用下面一段代码对JSON数据进行反序

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

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

热点排行