0

我有一个名为 Node 的类,在里面我有类型文档类的属性。

当我将它序列化为 XML 时,我得到的输出为

<Node>
<DocumentType>
<File></File>
</DoumentType>
<Node>

但我希望输出为

<Node>
<File></File>
<Node>

对象代码

public class Document
{
    [XmlElement(ElementName = "file")]
    public string File { get; set; }
}

public class Node
{
    public Document NodeDocument
    {
        get;
        set;
    }
}

如何使用 C# xml 序列化来做到这一点?

4

2 回答 2

1

按照 Kami 的建议,这里是供您参考的代码。所有功劳都归功于 Kami。

public class Node : IXmlSerializable {

    public Node() {
        NodeDocument = new Document();
    }

    public Document NodeDocument { get; set; }

    public System.Xml.Schema.XmlSchema GetSchema() {
        return null;
    }

    public void ReadXml(XmlReader reader) {            
        reader.ReadStartElement();
        NodeDocument.File = reader.ReadString();
        reader.ReadEndElement();
    }

    public void WriteXml(XmlWriter writer) {
        writer.WriteStartElement("file");
        writer.WriteString(NodeDocument.File);
        writer.WriteEndElement();
    }
}

public class Document {
    public String File { get; set; }
}

class Program {
    static void Main(string[] args) {
        var node = new Node();
        node.NodeDocument.File = "bbb.txt";

        Serialize<Node>("a.xml", node);

        node = Deserialize<Node>("a.xml");
        Console.WriteLine(node.NodeDocument.File);

        Console.Read();
    }

    static T Deserialize<T>(String xmlFilePath) where T : class {
        using (var textReader = File.OpenText(xmlFilePath)) {
            using (var xmlTextReader = new XmlTextReader(textReader)) {
                var serializer = new XmlSerializer(typeof(T));
                return (T)serializer.Deserialize(xmlTextReader);
            }
        }
    }

    static void Serialize<T>(String xmlFilePath, T obj) where T : class {
        using (var textWriter = File.CreateText(xmlFilePath)) {
            using (var xmlTextWriter = new XmlTextWriter(textWriter)) {
                var serializer = new XmlSerializer(typeof(T));
                serializer.Serialize(xmlTextWriter, obj);
            }
        }
    }
}
于 2012-11-20T12:30:29.137 回答
0

您是否考虑过实现IXmlSerializable接口 - http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

然后,您应该能够编写自定义序列化/反序列化以方便上述操作。

于 2012-11-20T10:53:18.373 回答