[求助]C# 反序列化Json字符串

xx706561551 2016-06-25 06:36:17
{
"assets":{
"res/animation/effcet_ui_renwuzhaomu_a.atlas":{
"md5":"4c0575628723e1635ec8be36acf88a2a",
"size":2308
},
"res/animation/effcet_ui_renwuzhaomu_a.png":{
"md5":"d85a63d08320f1ed0e57d14a29f2def2",
"size":149834
},
"res/animation/effcet_ui_renwuzhaomu_a.skel":{
"md5":"7be6748113adfb14507f2d3723592c4e",
"size":2781
},
"res/animation/effcet_ui_renwuzhaomu_b.atlas":{
"md5":"d70b08f984191603dd3ab07c9eac1132",
"size":4366
},
"res/animation/effcet_ui_renwuzhaomu_b.png":{
"md5":"c6ee22d650f450b3912843dba8dbffd9",
"size":263839
},
"res/animation/effcet_ui_renwuzhaomu_b.skel":{
"md5":"4d05f68fedf81911bb74789a882faf8d",
"size":4373
},
"res/animation/effcet_ui_renwuzhaomu_c.atlas":{
"md5":"6db21989f9e51f2bc521b5a07392161c",
"size":4366
},
"res/animation/effcet_ui_renwuzhaomu_c.png":{
"md5":"73a035f79f18434e8bf63c3302a1a8f9",
"size":287463
},
"res/animation/effcet_ui_renwuzhaomu_c.skel":{
"md5":"41ad60fbbf8d55774cbf75e62d9afdb0",
"size":4373
},
"res/animation/effec_ui_changxingliubian.atlas":{
"md5":"40a4b44d7691dedc81856377921b3f83",
"size":732
},
"res/animation/effec_ui_changxingliubian.png":{
"md5":"01fc15228c06ac011dfac2b848473a06",
"size":3711
},
"res/animation/effec_ui_changxingliubian.skel":{
"md5":"03f6c6b0e50ffce849d6239ec7c8e2bc",
"size":743
},
"res/animation/effect_Bossmodi_nuji.atlas":{
"md5":"cc3e52194acd74affe4bb865073017ed",
"size":2781
},
"res/animation/effect_Bossmodi_nuji.png":{
"md5":"d32625fa7805615af1c18e590633da87",
"size":185421
},
"res/animation/effect_Bossmodi_nuji.skel":{
"md5":"efbfc5b3f7b3f6dd7112ecf72580ec33",
"size":2141
},
"res/animation/effect_Bossmodi_pugong.atlas":{
"md5":"a12923fe6b2b1d45b9fb1842a5f28518",
"size":1292
},
"res/animation/effect_Bossmodi_pugong.png":{
"md5":"ae4c8b058d2d0e3d3a289d6a142a2b78",
"size":84422
}
}
像这样的一个Json字符串要怎样建立助手类,来进行反序列化呢?第一次接触到这样的代码,实在不知道该怎样建立,望各位大大指点一二。
...全文
280 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 19 楼 zhi_ai_yaya 的回复:
非json格式,"res/animation/effect_Bossmodi_nuji.png":里面的/和点不能作为key出现。 处理: 办法1:作为dictionary处理,自定义序列化函数。可以查询xml开放的序列化接口。 办法2:作为纯对象的成员变量处理,替换特殊字符,然后序列化为类。 这个伪json格式很有问题啊
我去试一试,谢谢
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 20 楼 qqamoon 的回复:
[quote=引用 15 楼 xx706561551 的回复:] 还没有试,那些属性是公司后面根据需要新添加上去的,我看了你写的,根据自己的理解把他写成这样的类,但是解析的时候一直解析不出来。
你最好试一试,还有,因为你已经定义了类,所以就别用 DeserializeAnonymousType 了,知道吧 而且, json 还有很多 attribute 可以用,非常强大 这是相关文档,建议好好看看 http://www.newtonsoft.com/json/help/html/Introduction.htm[/quote] 好的,谢谢你们的帮助。我去试试。
龍过鸡年 2016-06-28
  • 打赏
  • 举报
回复
引用 15 楼 xx706561551 的回复:
还没有试,那些属性是公司后面根据需要新添加上去的,我看了你写的,根据自己的理解把他写成这样的类,但是解析的时候一直解析不出来。
你最好试一试,还有,因为你已经定义了类,所以就别用 DeserializeAnonymousType 了,知道吧 而且, json 还有很多 attribute 可以用,非常强大 这是相关文档,建议好好看看 http://www.newtonsoft.com/json/help/html/Introduction.htm
我叫小菜菜 2016-06-28
  • 打赏
  • 举报
回复
非json格式,"res/animation/effect_Bossmodi_nuji.png":里面的/和点不能作为key出现。 处理: 办法1:作为dictionary处理,自定义序列化函数。可以查询xml开放的序列化接口。 办法2:作为纯对象的成员变量处理,替换特殊字符,然后序列化为类。 这个伪json格式很有问题啊
  • 打赏
  • 举报
回复
引用 8 楼 qqamoon 的回复:
[quote=引用 6 楼 xuzuning 的回复:] 楼主只是想问 "res/animation/effcet_ui_renwuzhaomu_a.png":{ "md5":"d85a63d08320f1ed0e57d14a29f2def2", "size":149834 }, 中的 res/animation/effcet_ui_renwuzhaomu_a.png 这个怎么定义而已 说那些没用的做什么?(虽然我也不知道)
感觉像个 dictionary 的 key[/quote] 是的,是 dictionary。 字典不是跨平台通用的结构。这类东西如果要跨平台,应该设计为数组。而不是字典。
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
无法反序列化。只能直接解析,使用通用的 JObject 架构来访问。例如 JObject.parse(str),然后遍历其 .Properties 属性集合的每一个单元。 真的不知道你这个 json 是哪一个家伙搞出来的。那个 assets 的值命名应该是一个 json数组(方便各种编程语言按照数组规范来高效率地处理),怎么能设计成一个 json 对象?
总监给的任务就是喊我通过反序列的方式把这个Json字符串解析出来,我也是第一次遇到这样的Json字符串。
  • 打赏
  • 举报
回复
无法反序列化。只能直接解析,使用通用的 JObject 架构来访问。例如 JObject.parse(str),然后遍历其 .Properties 属性集合的每一个单元。 真的不知道你这个 json 是哪一个家伙搞出来的。那个 assets 的值命名应该是一个 json数组(方便各种编程语言按照数组规范来高效率地处理),怎么能设计成一个 json 对象?
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 13 楼 qqamoon 的回复:
[quote=引用 11 楼 xx706561551 的回复:] public String date { get; set; } public String engineVersion { get; set; } public String git { get; set; } public String packageUrl { get; set; } public String remoteManifestUrl { get; set; } public String remoteVersionUrl { get; set; } public String version { get; set; } 我这样建立了类还是解析不出来。
我写的那个你试了没,能转换不? 红色标注的属性是你自己定义的?json 里有没有你定义的字段? 试试看这个

var obj = JsonConvert.DeserializeObject("json", new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
});
还有,可以自己添加一些数据, 然后 json.serial 一次,看看序列化出来的是什么,心里不就有数了吗。[/quote] 还没有试,那些属性是公司后面根据需要新添加上去的,我看了你写的,根据自己的理解把他写成这样的类,但是解析的时候一直解析不出来。
xx706561551 2016-06-28
  • 打赏
  • 举报
回复



引用 12 楼 starfd 的回复:
那些多出来的属性,又没任何标志不要序列化或反序列化,一般的dll默认都是所有属性都序列化的 你将那些多出来的属性注释掉再试试
谢谢,这些属性是后面公司根据需求新添加上去的。
龍过鸡年 2016-06-28
  • 打赏
  • 举报
回复
引用 11 楼 xx706561551 的回复:
public String date { get; set; } public String engineVersion { get; set; } public String git { get; set; } public String packageUrl { get; set; } public String remoteManifestUrl { get; set; } public String remoteVersionUrl { get; set; } public String version { get; set; } 我这样建立了类还是解析不出来。
我写的那个你试了没,能转换不? 红色标注的属性是你自己定义的?json 里有没有你定义的字段? 试试看这个

var obj = JsonConvert.DeserializeObject("json", new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
});
还有,可以自己添加一些数据, 然后 json.serial 一次,看看序列化出来的是什么,心里不就有数了吗。
  • 打赏
  • 举报
回复
那些多出来的属性,又没任何标志不要序列化或反序列化,一般的dll默认都是所有属性都序列化的 你将那些多出来的属性注释掉再试试
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 9 楼 qqamoon 的回复:

var path = System.IO.Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.json");

var s = System.IO.File.ReadAllText(path);

Console.WriteLine(s);

var info = new
{
    md5 = "",
    size = 0,
};

var obj = new
{
    assets = new Dictionary<string, object>()
    {
        { "", info },
    },
};

try
{
    dynamic result = JsonConvert.DeserializeAnonymousType(s, obj);

    foreach (KeyValuePair<string, dynamic> item in result.assets)
    {
        Console.WriteLine("{0}", item.Key);
        Console.WriteLine("    md5: {0}", item.Value.md5);
        Console.WriteLine("   size: {0}", item.Value.size);
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
public class Manifest { /// <summary> /// 文件MD5码 /// </summary> public String md5 { get; set; } /// <summary> /// 文件大小 /// </summary> public Int32 size { get; set; } } public class ProjectManifest { public Dictionary<String, Manifest> assets = new Dictionary<string, Manifest>(); public String date { get; set; } public String engineVersion { get; set; } public String git { get; set; } public String packageUrl { get; set; } public String remoteManifestUrl { get; set; } public String remoteVersionUrl { get; set; } public String version { get; set; } } 我这样建立了类还是解析不出来。
xx706561551 2016-06-28
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
楼主只是想问 "res/animation/effcet_ui_renwuzhaomu_a.png":{ "md5":"d85a63d08320f1ed0e57d14a29f2def2", "size":149834 }, 中的 res/animation/effcet_ui_renwuzhaomu_a.png 这个怎么定义而已 说那些没用的做什么?(虽然我也不知道)
对的,就是这个意思
圣殿骑士18 2016-06-25
  • 打赏
  • 举报
回复
你google不行你百度啊
龍过鸡年 2016-06-25
  • 打赏
  • 举报
回复

var path = System.IO.Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.json");

var s = System.IO.File.ReadAllText(path);

Console.WriteLine(s);

var info = new
{
    md5 = "",
    size = 0,
};

var obj = new
{
    assets = new Dictionary<string, object>()
    {
        { "", info },
    },
};

try
{
    dynamic result = JsonConvert.DeserializeAnonymousType(s, obj);

    foreach (KeyValuePair<string, dynamic> item in result.assets)
    {
        Console.WriteLine("{0}", item.Key);
        Console.WriteLine("    md5: {0}", item.Value.md5);
        Console.WriteLine("   size: {0}", item.Value.size);
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
xx706561551 2016-06-25
  • 打赏
  • 举报
回复
引用 1 楼 q107770540 的回复:
google : c# json.net
google 不是进不去了吗?
xx706561551 2016-06-25
  • 打赏
  • 举报
回复
google 不是进不去了吗?
q107770540 2016-06-25
  • 打赏
  • 举报
回复
google : c# json.net
龍过鸡年 2016-06-25
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
楼主只是想问 "res/animation/effcet_ui_renwuzhaomu_a.png":{ "md5":"d85a63d08320f1ed0e57d14a29f2def2", "size":149834 }, 中的 res/animation/effcet_ui_renwuzhaomu_a.png 这个怎么定义而已 说那些没用的做什么?(虽然我也不知道)
感觉像个 dictionary 的 key
龍过鸡年 2016-06-25
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
楼主只是想问 "res/animation/effcet_ui_renwuzhaomu_a.png":{ "md5":"d85a63d08320f1ed0e57d14a29f2def2", "size":149834 }, 中的 res/animation/effcet_ui_renwuzhaomu_a.png 这个怎么定义而已 说那些没用的做什么?(虽然我也不知道)
加载更多回复(2)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧