正确设置XmlSerializer选项

本文关键字:选项 XmlSerializer 设置 | 更新日期: 2023-09-27 18:02:41

我的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 />

正确设置XmlSerializer选项

当您使用[Serializable]修饰类和成员时,对象将使用不包含xsi:nil="true "的旧方法进行序列化但是,当您用[DataContract]属性修饰该类时,XmlSerializer将包含xsi:nil="true.

删除xsi:nil="true的一种方法是用[Serializable]属性装饰类