2011-06-25 16 views
2

オブジェクトをXMLの文字列に変換するメソッドがあります。これは素晴らしいですが、出力XMLにオブジェクトプロパティ(文字列、int、doubleなど)のデータ型を含める必要があります。私は高低を検索しましたが、カスタムシリアライザを書かずに解決策を見つけることはできません。.Net XmlSerializer出力データ型

ご協力いただければ幸いです。

.NETで
private static string ToXML<t>(t obj, bool indent = false) 
{ 
    System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces(); 
    XmlSerializer xs = new XmlSerializer(typeof(t)); 
    StringBuilder sbuilder = new StringBuilder(); 
    var xmlws = new System.Xml.XmlWriterSettings() {OmitXmlDeclaration = true, Indent = indent}; 

    ns.Add(string.Empty, string.Empty); 

    using (var writer = System.Xml.XmlWriter.Create(sbuilder, xmlws)) 
    { 
     xs.Serialize(writer, obj, ns); 
    } 

    string result = sbuilder.ToString(); 

    ns = null; 
    xs = null; 
    sbuilder = null; 
    xmlws = null; 

    return result; 
} 
+1

また、スタイルの提案 - 大文字で始まる大文字または識別子を使用して、型パラメータをジェネリックに表現します。 Microsoftが正当な理由でこれを推奨する方法です。一見して、コードの読者は、オブジェクト自体ではなく、メソッドに渡される型パラメータが「T」であることを知っています。 – RyanR

+1

btw、C#では、あなたの地域住民を 'null'に割り当てる必要はありません.... –

答えて

1

XmlSerializerは再シリアライズそれがXMLからデータを扱う方法を決定するために、具体的なオブジェクト型を使用してそれ自体で動作するように設計されています。

標準XmlSerializerは、その情報をシリアル化しません。

あなたはWCFのDataContractSerializerを調べてください。私はそれがはるかに冗長であり、より少ないと思います。それはまた非常に柔軟です。

関連する問題