序列化只有一个类的一个属性

时间:2011-01-19 11:33:12

标签: c# .net xml serialization

我有一个大约有20名成员的班级。我需要在XML中序列化这个类的对象。但条件是我只需要XML中的一个成员。

我该怎么办呢。

编辑:但在某个时候,我想序列化所有成员。所以我不能使用[XMLIgnore]属性。

5 个答案:

答案 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

结束财产