我有一个大约有20名成员的班级。我需要在XML中序列化这个类的对象。但条件是我只需要XML中的一个成员。
我该怎么办呢。
编辑:但在某个时候,我想序列化所有成员。所以我不能使用[XMLIgnore]属性。
答案 0 :(得分:2)
为您不想序列化的所有成员添加以下属性
[XmlIgnore()]
public Type X
{
get;set;
}
答案 1 :(得分:2)
你可以根据一些外部参数明确地实现IXmlSerializable
接口并自己控制字段的读/写,即
class CustomXml: IXmlSerializable
{
public System.Xml.Schema.XmlSchema GetSchema()
{
//
}
public void ReadXml(System.Xml.XmlReader reader)
{
if (SerializationParameter.FullSerialization)
//deserialize everything
else
//deserialize one field only
}
public void WriteXml(System.Xml.XmlWriter writer)
{
if (SerializationParameter.FullSerialization)
//serialize everything
else
//serialize one field only
}
}
其中SerializationParameter.FullSerialization
是一个如何控制序列化时间的示例。
答案 2 :(得分:1)
您可以将[XmlIgnore]属性放在您不想序列化的所有成员上。
答案 3 :(得分:1)
有两种方法可以使用属性在.NET中使属性不可序列化。
您可以设置属性[NonSerialized]
或[XmlIgnore]
如果您使用二进制文件或SOAP进行序列化,则应使用[NonSerialized]
,如果您只想使用XML进行序列化,则应使用[XmlIgnore]
。
所以在你的情况下答案是[XmlIgnore]
编辑: 无法动态地将属性应用于属性。 这里有一些关于此的信息:Can attributes be added dynamically in C#?和Remove C# attribute of a property dynamically
同样作为锻炼,您可能拥有具有不同属性的不同类别的副本。
OR
让你的类的副本将所有道具设置为可序列化,但只填充你需要的属性,这样每个其他东西都将为null / empty,并且在该类的序列化之后你应该得到你需要的XML。
答案 4 :(得分:0)
标记其他属性
<NonSerializable()> _
Property someproperty
结束财产