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