Maison >développement back-end >Tutoriel C#.Net >Le type de contrat de données de désérialisation C# Json ne peut pas être désérialisé car le membre de données requis n'a pas été trouvé

Le type de contrat de données de désérialisation C# Json ne peut pas être désérialisé car le membre de données requis n'a pas été trouvé

黄舟
黄舟original
2017-02-15 11:37:221529parcourir

Contexte aujourd'hui : sérialisation et désérialisation C# Json

Désérialisation Le message d'erreur suivant est apparu.

System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。

在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)


La raison spécifique est : j'ai une nouvelle valeur dans l'entité désérialisée class Deux attributs ont été ajoutés :

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;
            }
        }

Lors de l'utilisation de la chaîne Json précédemment enregistrée pour désérialiser, il y a deux nouveaux attributs, non La valeur correspondante, donc le l'erreur ci-dessus a été signalée.

Solution :


[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;
            }
        }
}

Représentez cette propriété via la propriété DataMember(IsRequired = false), qui n'est pas obligatoire. De cette manière, il est garanti que lors de la désérialisation, même si la définition de l'attribut manque dans la chaîne JSON, il pourra être désérialisé normalement.

Petite note :

Ajouter DataMember(IsRequired = false), la marque [DataContract] doit être ajoutée à la classe correspondante.


Ce qui précède est le contenu Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn). ! Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn