0

Node という名前のクラスがあり、その中に Type Document Class の Property があります。

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

カミの提案に従って、参照用のコードを次に示します。すべてのクレジットはカミに行きます。

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 に答える