背景今天在使用:C# Json 序列化與還原序列化
還原序列化的時候出現了下面的錯誤資訊。
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]標識。
以上就是以上就是的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!