오늘의 배경: C# Json 직렬화 및 역직렬화
역직렬화 다음과 같은 오류 메시지가 나타났습니다.
System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。 在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
구체적인 이유는 다음과 같습니다. 역직렬화된 엔터티 클래스 Two에 새 항목을 추가했습니다. 속성:
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] 마크를 추가해야 합니다.
위 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. ! 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!