【问题标题】:C# Setting XmlSerializer options correctly?C# 正确设置 XmlSerializer 选项?
【发布时间】:2011-07-19 03:45:08
【问题描述】:

我的 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"
  • 将空标签(如&lt;Obsolete&gt;&lt;/Obsolete&gt;)折叠成简单的形式&lt;Obsolete /&gt;

【问题讨论】:

  • 复制类结构和属性会很有帮助。

标签: c# xml deserialization xml-deserialization


【解决方案1】:

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

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

【讨论】:

  • 该类仅用 [XmlRoot(ElementName = "Product")] 装饰
  • 在 .NET 4 中是这样吗?我的 EF POCO 类只用包含这些属性的 [Serializable] 装饰...
猜你喜欢
  • 2012-09-24
  • 2015-02-25
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多