2011-07-19 8 views
1

私のXmlSerializerコードが、必要以上に冗長なXmlを出力していますが、どのように出力設定を適切に制御できますか?これはコードです:C#XmlSerializerオプションを正しく設定していますか?

var stream = new MemoryStream(); 
var xmlSerializer = new XmlSerializer(objectToSerialize.GetType());    
xmlSerializer.Serialize(stream, objectToSerialize); 
string xml = encoding != null ? encoding.GetString(stream.ToArray()) 
           : Encoding.Default.GetString(stream.ToArray()); 

、出力は次のようになります。nilを=:

  • はXSIを削除します。私はそうのようなXMLをフォーマットすることができるようにしたい

    <?xml version="1.0"?> 
    <ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
        <Product> 
        <Id>1</Id> 
        <ProductCode>A</ProductCode> 
        <ProductDescription>Product A</ProductDescription> 
        <Obsolete xsi:nil="true"></Obsolete> 
        </Product> 
    </ArrayOfProduct> 
    

    値のない行から "true"

  • <Obsolete></Obsolete>のような空のタグを簡略化して<Obsolete />
+0

あなたが属性を持つクラス構造をコピーする場合には参考になる にある –

答えて

0

[Serializable]を使用してクラスとメンバを飾ると、オブジェクトはxsi:nil = "trueを含まない古いメソッドを使用してシリアル化されます。 しかし、[DataContract]属性を持つクラスを装飾すると、XmlSerializerにxsi:nil = "trueです。

XSIを削除する1つの方法:nilを= "真は[Serializableを]属性でクラスを飾る

+0

クラスのみで飾られています。 [XmlRoot(ElementName = "Product")] –

+0

.NET 4ではこれが本当ですか?これらの属性を含む '[Serializable]'だけで修飾されたEF POCOクラスがあります。 – rbellamy

関連する問題