反序列化的时刻涌现了下面的毛病信息。
System.Runtime.Serialization.SerializationException: 数据协议范例“TestEntity”没法反序列化,由于未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。 在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
详细原因是:我在反序列化的实体类中新加了两个属性:
private bool multipleChoice; /// <summary> /// 协助引擎是不是许可多选 /// </summary> [XmlIgnore] [Browsable(false)] public bool MultipleChoice { get { return multipleChoice; } set { multipleChoice = value; } } private string runTimeDisplayColumns; /// <summary> /// 协助引擎运行时显现的列 /// </summary> [XmlIgnore] [Browsable(false)] public string RunTimeDisplayColumns { get { return runTimeDisplayColumns; } set { runTimeDisplayColumns = value; } }
在运用之前保留的Json串反序列化的时刻,新增的两个两个属性,没有对应的值,所以报出了上面的毛病。
解决方法:
[DataContract] public class TestEntity { private bool multipleChoice; /// <summary> /// 协助引擎是不是许可多选 /// </summary> [XmlIgnore] [Browsable(false)] [DataMember(IsRequired = false)] public bool MultipleChoice { get { return multipleChoice; } set { multipleChoice = value; } } private string runTimeDisplayColumns; /// <summary> /// 协助引擎运行时显现的列 /// </summary> [XmlIgnore] [Browsable(false)] [DataMember(IsRequired = false)] public string RunTimeDisplayColumns { get { return runTimeDisplayColumns; } set { runTimeDisplayColumns = value; } } }
经由过程DataMember(IsRequired = false)属性外表此属性,不是必需的。如许的话,保证了在反序列化的时刻,纵然JSON串内缺乏该属性的定义能一般反序列化。
小注:
在属性上增加DataMember(IsRequired = false)后,对应的类上必需增加 [DataContract]标识。
以上就是以上就是的内容,更多相关内容请关注ki4网(www.ki4.cn)!的内容,更多相关内容请关注ki4网(www.ki4.cn)!