C# Json反序列化 資料協定型別 無法反序列化 因為未找到必需的資料成員
阿新 • • 發佈:2019-01-08
反序列化的時候出現了下面的錯誤資訊。
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串反序列化的時候,新增的兩個兩個屬性,沒有對應的值,所以報出了上面的錯誤。
解決方法:
通過DataMember(IsRequired = false)屬性表面此屬性,不是必須的。這樣的話,保證了在反序列化的時候,即使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)後,對應的類上必須新增 [DataContract]標識。