碰上一个这么纠结的json反序列化!!!!!

legend9082 2011-04-15 10:48:54
{
"prefecture": [
{
"albums": {
"album": [
{
"episodes": {
"episode": { "something": 1 }
}
},
{
"episodes": {
"episode": [{"something":2 }, {"something":3} ]
}
}
]
}
}
]
}

纠结的是episodes那个地方, 反序列化得类是写成 class Episodes { public Episode episode;} 还是
class Episodes { public List<Episode> episode;} 好像都不行啊!!一个有list,一个又没有!怎么办呢??
...全文
198 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
csproj 2011-04-15
  • 打赏
  • 举报
回复
你用的微软自带的还是Json.net
试试
class Episodes 
{
private List<Episode> _episode
public List<Episode> episode
{
get{return _episode;}
set{
if(value is Episode)
value = new List<Episode>(){value };
_episode = value;
}
}
}
阿非 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 legend9082 的回复:]
引用 3 楼 fangxinggood 的回复:

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something":3} ]

这个json,手写的吗?怎么序列化能得到这样的东东。


是手写的, 想……
[/Quote]

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something":3} ]

这两个本身就不是一个东东,一个相当于是个体,另一个是多个个体(集合)

这种情况当然没有办法反序列化

把个体变成集合的一种情况即可, 即集合中只有一个元素
机器人 2011-04-15
  • 打赏
  • 举报
回复
"episode": [{ "something": 1 }]

都统一成List吧
legend9082 2011-04-15
  • 打赏
  • 举报
回复
还是上图吧,jsonview的结果:


legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengyarongaa 的回复:]

这个代码 。。。 不知道所以然
[/Quote]

就是episode后 出现了不一样的状况, 写不出一个统一的类来反序列化。。
有办法么??
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangxinggood 的回复:]

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something":3} ]

这个json,手写的吗?怎么序列化能得到这样的东东。
[/Quote]

是手写的, 想要表达是: 给我的json字符串中, episode后有些是[]的list, 有些又没有!
那么我怎么构造相应的episodes类来反序列化??
机器人 2011-04-15
  • 打赏
  • 举报
回复
"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something":3} ]

这个json,手写的吗?怎么序列化能得到这样的东东。
ycproc 2011-04-15
  • 打赏
  • 举报
回复
这个代码 。。。 不知道所以然
legend9082 2011-04-15
  • 打赏
  • 举报
回复
望大侠们解答!!
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sandy945 的回复:]

如果 你不能在构建 json字符串的时候 更改,那就只能在 接收以后处理

可以考虑通过正则 将

"episode": { "something": 1 }

变成 "episode": [{"something":1 }]
[/Quote]

恩 谢谢了 对正则也不是很了解 觉得应该可以
阿非 2011-04-15
  • 打赏
  • 举报
回复
如果 你不能在构建 json字符串的时候 更改,那就只能在 接收以后处理

可以考虑通过正则 将

"episode": { "something": 1 }

变成 "episode": [{"something":1 }]
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sandy945 的回复:]

引用 10 楼 legend9082 的回复:

引用 8 楼 sandy945 的回复:

引用 4 楼 legend9082 的回复:
引用 3 楼 fangxinggood 的回复:

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"……
[/Quote]

额,json字符串是服务器传过来。
结构远比这个复杂,不是一下就能改的,
可以考虑正则表达式不??
阿非 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 legend9082 的回复:]

引用 8 楼 sandy945 的回复:

引用 4 楼 legend9082 的回复:
引用 3 楼 fangxinggood 的回复:

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something……
[/Quote]

"episode": { "something": 1 }
写成 "episode": [{"something":1 }]
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiabiao113 的回复:]

你用的微软自带的还是Json.net
试试
C# code
class Episodes
{
private List<Episode> _episode
public List<Episode> episode
{
get{return _episode;}
set{
if(value is Episode)
……
[/Quote]

用的是DataContractJsonSerializer
你这段代码还是不能解决我的问题啊!
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fangxinggood 的回复:]

"episode": [{ "something": 1 }]

都统一成List吧
[/Quote]

json字符串没法改啊,是服务器传过来的。。
legend9082 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]

引用 4 楼 legend9082 的回复:
引用 3 楼 fangxinggood 的回复:

"episode": { "something": 1 }
-------------------------------------------------
"episode": [{"something":2 }, {"something":3} ]

这个json,手写的吗?怎么……
[/Quote]

那这个episodes类怎么写呢??还是不太懂啊!

110,543

社区成员

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

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

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