C#使用自定义值序列化属性

时间:2014-07-04 09:20:03

标签: c# serialization

我想序列化一个包含很多属性的类。其中一些属性很复杂。有一些类型的Bitmap,Color等等,它们根本没有被序列化。

我使用的方法如下:

        XmlSerializer serializer = new XmlSerializer(typeof(MyObject));

        MemoryStream stream = new MemoryStream();

        serializer.Serialize(stream, obj);

        stream.Flush();
        stream.Seek(0, SeekOrigin.Begin);

        XmlDocument returnDoc = new XmlDocument();
        returnDoc.Load(stream);

如何为这些复杂属性创建“自定义”方法?到目前为止,我自己创建了XML文档,并通过每个属性将其转换为文本。

我需要的另一个例子是引用。这个类有一些对其他类的引用。我不希望整个子类被序列化,只需要它的名称。

我确信如何实现这一目标有不同的方法。什么是最好的方式?

我已经考虑过制作额外的属性并忽略其他属性(XmlIgnore()),但这将是一个开销。

谢谢!

2 个答案:

答案 0 :(得分:1)

您最好的选择是停止尝试序列化您的域模型,并创建一个DTO模型,以您希望存储的方式表示您想要存储的内容(即面向您选择的序列化程序)。

如果要存储位图,则可能需要byte[]属性。如果您想存储某些内容的名称 - string。然后只是在他们之间映射。简单,无痛,比试图打断序列化程序做一些它不想做的事情要容易得多。

答案 1 :(得分:0)

对于不可序列化的属性,您需要自己实现序列化。您可以将这些对象序列化为字节数组,然后使用Base64编码将它们放入XML。请查看以下链接:XmlSerializer , base64 encode a String member

但是,如果您不需要序列化为XML,则可以使用binary serialization,它将适用于所有属性。