Heim  >  Artikel  >  Backend-Entwicklung  >  Der C#-Json-Deserialisierungsdatenvertragstyp kann nicht deserialisiert werden, da das erforderliche Datenelement nicht gefunden wurde

Der C#-Json-Deserialisierungsdatenvertragstyp kann nicht deserialisiert werden, da das erforderliche Datenelement nicht gefunden wurde

黄舟
黄舟Original
2017-02-15 11:37:221429Durchsuche

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)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn