DeserializeObject反序列化时遇到的问题

WhiteBallon 2011-09-15 01:03:24
调用如下函数:
JsonBonus bonus = JsonConvert.DeserializeObject<JsonBonus>(s);


JsonBonus 结构如下:
public partial class JsonBonus : ITaskerLogic
{
public int Ratio;
public int BonusType;
public float Num;
public int MsgID { get { return 11; } }
}

字符串如下(两个例子)

{\"Ratio\":100,\"BonusType\":1,\"Num\":0.0005}
{\"Ratio\":10,\"BonusType\":2,\"Num\":2}

遇到的错误:
转换Ratio BonusType的时候,报错如下:
Could not cast or convert from System.Int64 to System.Int32.

转换Num的时候报错
Could not cast or convert from System.double to float.

我想问下,能不能在不修改结构体的前提下,解决这个问题。
...全文
1207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2011-10-10
  • 打赏
  • 举报
回复
[DataContract]
public class JsonBonus : ITaskerLogic
{
[DataMember(Order = 0)]
public int Ratio{get;set;}
[DataMember(Order = 1)]
public int BonusType{get;set;}
[DataMember(Order = 2)]
public float Num{get;set;}
public int MsgID { get { return 11; } }
}
机器人 2011-10-10
  • 打赏
  • 举报
回复
我跑下面的代码没什么问题 .net 2.0 和 .net 4.0


static void Main(string[] args)
{
var bonus1 = JsonConvert.DeserializeObject<JsonBonus>("{\"Ratio\":100,\"BonusType\":1,\"Num\":0.0005}");
Console.WriteLine("BonusType:" + bonus1.BonusType);

var bonus2 = JsonConvert.DeserializeObject<JsonBonus>("{\"Ratio\":10,\"BonusType\":2,\"Num\":2}");
Console.WriteLine("Num:" + bonus2.Num);
Console.Read();
}
frant 2011-10-10
  • 打赏
  • 举报
回复
JsonBonus要是数组怎么序列化呢?
WhiteBallon 2011-09-15
  • 打赏
  • 举报
回复

是不是 \"Num\":0.0005 会被默认为double
而 \"Num\":2 被默认为int64 ?
bdmh 2011-09-15
  • 打赏
  • 举报
回复
定义的类型不一样,这样占用空间不一样
除非你自己写代码,确定序列化哪些字段或怎么处理类型不一致的情况
WhiteBallon 2011-09-15
  • 打赏
  • 举报
回复
望不吝赐教。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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