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é

黄舟
Libérer: 2017-02-15 11:37:22
original
1519 Les gens l'ont consulté

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)
Copier après la connexion


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;
            }
        }
Copier après la connexion

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;
            }
        }
}
Copier après la connexion

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 (m.sbmmt.com). ! Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (m.sbmmt.com) !

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal