关键词搜索

源码搜索 ×
×

C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员

发布2015-08-17浏览6520次

详情内容

背景今天在使用:C# Json 序列化与反序列化

反序列化的时候出现了下面的错误信息。

System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。

在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)

具体原因是:我在反序列化的实体类中新加了两个属性:
  1. private bool multipleChoice;
  2. /// <summary>
  3. /// 帮助引擎是否允许多选
  4. /// </summary>
  5. [XmlIgnore]
  6. [Browsable(false)]
  7. public bool MultipleChoice
  8. {
  9. get
  10. {
  11. return multipleChoice;
  12. }
  13. set
  14. {
  15. multipleChoice = value;
  16. }
  17. }
  18. private string runTimeDisplayColumns;
  19. /// <summary>
  20. /// 帮助引擎运行时显示的列
  21. /// </summary>
  22. [XmlIgnore]
  23. [Browsable(false)]
  24. public string RunTimeDisplayColumns
  25. {
  26. get
  27. {
  28. return runTimeDisplayColumns;
  29. }
  30. set
  31. {
  32. runTimeDisplayColumns = value;
  33. }
  34. }

在使用之前保存的Json串反序列化的时候,新增的两个两个属性,没有对应的值,所以报出了上面的错误。

解决方法:

  1. [DataContract]
  2. public class TestEntity
  3. {
  4. private bool multipleChoice;
  5. /// <summary>
  6. /// 帮助引擎是否允许多选
  7. /// </summary>
  8. [XmlIgnore]
  9. [Browsable(false)]
  10. [DataMember(IsRequired = false)]
  11. public bool MultipleChoice
  12. {
  13. get
  14. {
  15. return multipleChoice;
  16. }
  17. set
  18. {
  19. multipleChoice = value;
  20. }
  21. }
  22. private string runTimeDisplayColumns;
  23. /// <summary>
  24. /// 帮助引擎运行时显示的列
  25. /// </summary>
  26. [XmlIgnore]
  27. [Browsable(false)]
  28. [DataMember(IsRequired = false)]
  29. public string RunTimeDisplayColumns
  30. {
  31. get
  32. {
  33. return runTimeDisplayColumns;
  34. }
  35. set
  36. {
  37. runTimeDisplayColumns = value;
  38. }
  39. }
  40. }
通过DataMember(IsRequired = false)属性表面此属性,不是必须的。这样的话,保证了在反序列化的时候,即使JSON串内缺少该属性的定义能正常反序列化。

小注:

在属性上添加DataMember(IsRequired = false)后,对应的类上必须添加 [DataContract]标识。



相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载