C#正确设置XmlSerializer选项?

时间:2011-07-19 03:45:09

标签: c# xml deserialization xml-deserialization

我的XmlSerializer代码正在输出比我要求的更详细的Xml,如何正确控制输出设置?这是代码:

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());

输出如下:

<?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>

我希望能够像这样格式化Xml:

  • 从没有值的行
  • 中删除xsi:nil =“true”
  • <Obsolete></Obsolete>之类的空标签折叠为简单格式<Obsolete />

1 个答案:

答案 0 :(得分:0)

使用[Serializable]装饰类和成员时,使用不包含xsi的旧方法序列化对象:nil =“true 但是当你使用[DataContract]属性修饰类时,XmlSerializer将包含xsi:nil =“true。

删除xsi的一种方法:nil =“true is to 用[Serializable]属性装饰类。