22

XmlDocument/temp 文字列をラウンドトリップせずにオブジェクトを逆シリアル化する方法はありますか? 次のようなものを探しています。

class Program
{
    static void Main(string[] args)
    {
        XDocument doc = new XDocument();
        MyClass c = new MyClass();
        c.SomeValue = "bar";

        doc.Add(c);

        Console.Write(doc.ToString());
        Console.ReadLine();
    }
}

[XmlRoot(ElementName="test")]
public class MyClass
{
    [XmlElement(ElementName = "someValue")]
    public string SomeValue { get; set; }
}

ただし、それを行うとエラーが発生します(コンテンツに空白以外の文字を追加することはできません。)要素でクラスをラップすると、書き込まれたコンテンツが <element>ConsoleApplication17.MyClass</element> であることがわかります-エラー理にかなっています。

自動的にデシリアライズする拡張メソッドがありますが、それは私が探しているものではありません (これはクライアント側ですが、より最適なものが必要です)。

何か案は?

4

1 に答える 1

34

このようなものですか?

    public XDocument Serialize<T>(T source)
    {
        XDocument target = new XDocument();
        XmlSerializer s = new XmlSerializer(typeof(T));
        System.Xml.XmlWriter writer = target.CreateWriter();
        s.Serialize(writer, source);
        writer.Close();
        return target;
    }

    public void Test1()
    {
        MyClass c = new MyClass() { SomeValue = "bar" };
        XDocument doc = Serialize<MyClass>(c);
        Console.WriteLine(doc.ToString());
    }
于 2008-11-26T18:46:07.487 に答える