Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlIgnore仅用于序列化_C#_Xml_Serialization_Deserialization_Xmlignore - Fatal编程技术网

C# XmlIgnore仅用于序列化

C# XmlIgnore仅用于序列化,c#,xml,serialization,deserialization,xmlignore,C#,Xml,Serialization,Deserialization,Xmlignore,PasswordEncryptor是我调用Encode方法进行编码的一个类。在对密码进行编码后,它将由XmlSerializer序列化到磁盘中的文件中。但是,每次程序启动时,文件都被反序列化,并且在集合中,PasswordEncryptor.Encode()再次对密码进行编码。有没有一种方法可以只在反序列化中使用它?XmlAttributeOverrides在这种情况下会有所帮助 从 允许您在执行以下操作时重写属性、字段和类属性: 使用XmlSerializer序列化或反序列化对象 使用此选项,

PasswordEncryptor
是我调用
Encode
方法进行编码的一个类。在对
密码
进行编码后,它将由
XmlSerializer
序列化到磁盘中的文件中。但是,每次程序启动时,文件都被反序列化,并且在
集合中,
PasswordEncryptor.Encode()
再次对
密码进行编码。有没有一种方法可以只在反序列化中使用它?

XmlAttributeOverrides
在这种情况下会有所帮助

允许您在执行以下操作时重写属性、字段和类属性: 使用XmlSerializer序列化或反序列化对象

使用此选项,我们可以在反序列化过程中忽略特定属性

会是这样的

        private string _password;

        public string Password
        {
            get 
            {
                return _password; 
            }
            set
            {
                if (_password != value)
                {
                    _password = PasswordEncryptor.Encode(value);
                    OnPropChanged("Password");                
                }
            }
        }
xmlementattribute attr=new xmlementattribute();
attr.ElementName=“”;
XmlAttributes attrs=新的XmlAttributes();
attrs.XmlIgnore=true;
attrs.xmlements.Add(attr);
XmlAttributeOverrides attrOverrides=新的XmlAttributeOverrides();
Add(typeof(),“”,attrs);
//反序列化时使用此选项
XmlSerializer s=新的XmlSerializer(typeof(),attrOverrides);
//序列化时使用此选项
XmlSerializer s=新的XmlSerializer(typeof());

但我使用的XmlSerializer还可以序列化许多其他属性,所有其他属性都需要序列化或反序列化。如何将此密码属性挑出?只需使用不同的XmlSerializer进行序列化和反序列化。如果希望序列化包括password属性在内的所有属性,只需使用XmlSerializer而不进行任何重写,并且不要在password属性上指定XmlIgnore。对于反序列化,请使用具有上述覆盖的XmlSerializer。包括password元素并将XmlIgnore属性设置为overrides。是的,我希望所有属性一起序列化,这样我就不会得到两个文件。第二个真是个好主意!是否需要在Password属性上方标记某些内容?类似于[XmlIgnore]的内容,但不在本例中?正如我在前面的评论中所说,您不需要在password属性上设置任何内容,因为在重写时,您将显式地将其设置为ignore;这有点奏效,但并不完全奏效。在反序列化过程中,将忽略保存到磁盘的文件中的属性,但它仍会进入set inside属性并再次对已编码的密码进行编码。
XmlElementAttribute attr = new XmlElementAttribute();
attr.ElementName = "<elementName>";

XmlAttributes attrs = new XmlAttributes();
attrs.XmlIgnore = true;
attrs.XmlElements.Add(attr);

XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
attrOverrides.Add(typeof(<className>), "<elementName>", attrs);

// use this when deserializing
XmlSerializer s = new XmlSerializer(typeof(<className>), attrOverrides);

// use this when serializing
XmlSerializer s = new XmlSerializer(typeof(<className>));