Heim > Artikel > Backend-Entwicklung > Der C#-Json-Deserialisierungsdatenvertragstyp kann nicht deserialisiert werden, da das erforderliche Datenelement nicht gefunden wurde
Hintergrund heute: C# Json Serialisierung und Deserialisierung
Deserialisierung Die folgende Fehlermeldung wurde angezeigt.
System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。 在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
Der konkrete Grund ist: Ich habe einen neuen Wert in der deserialisierten Entität class Zwei Attribute wurden hinzugefügt:
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; } }
Bei Verwendung der zuvor gespeicherten Json-Zeichenfolge zum Deserialisieren gibt es zwei neue Attribute, nein Der entsprechende Wert, also der obiger Fehler wurde gemeldet.
Lösung:
[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; } } }
Stellen Sie diese Eigenschaft durch die Eigenschaft DataMember(IsRequired = false) dar, die nicht erforderlich ist. Auf diese Weise wird sichergestellt, dass während der Deserialisierung, auch wenn die Definition des Attributs im JSON-String fehlt, es normal deserialisiert werden kann.
Kleiner Hinweis:
DataMember hinzufügen(IsRequired = false), Die Markierung [DataContract] muss der entsprechenden Klasse hinzugefügt werden.
Das Obige ist der Inhalt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn). ! Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!