阻止 XmlSerializer 设置输出格式

Prevent XmlSerializer from formatting output

提问人:Maxim Gershkovich 提问时间:3/24/2011 最后编辑:Jacek PrzemienieckiMaxim Gershkovich 更新时间:4/30/2019 访问量:27003

问:

将默认设置与 XmlSerializer 一起使用时,它会将 XML 输出为格式化值。

IE:类似的东西。

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Stock>
    <ProductCode>12345</ProductCode>
    <ProductPrice>10.32</ProductPrice>
  </Stock>
  <Stock>
    <ProductCode>45632</ProductCode>
    <ProductPrice>5.43</ProductPrice>
  </Stock>
</ArrayOfStock>

如何防止输出出现任何类型的格式?所以我希望实现的就是这个。

<?xml version="1.0" encoding="utf-8"?><ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Stock><ProductCode>123456</ProductCode><ProductPrice>10.57</ProductPrice></Stock><Stock><ProductCode>789123</ProductCode><ProductPrice>133.22</ProductPrice></Stock></ArrayOfStock>

编辑:我的方法的完整代码是

public static String Serialize(Stock stock)
{
     XmlSerializer serializer = new XmlSerializer(typeof(Stock));

     using (StringWriter stringWriter = new StringWriter())
     {
         serializer.Serialize(stringWriter, stock);
         return stringWriter.ToString();
     }            
}
C# 格式设置 XML 序列化

评论

0赞 John Saunders 3/24/2011
为什么格式很重要?它会导致问题吗?

答:

0赞 Ivan G. 3/24/2011 #1

..

XmlSerializer xmlser = new XmlSerializer(...);

XmlWriterSettings settings = new XmlWriterSettings {Indent = false};

using (XmlWriter xw = XmlWriter.Create(stream, settings))
{

...

48赞 Xavier Poinas 3/24/2011 #2

不是很直观,但属性控制整个格式:IndentXmlWriterSettings

var serializer = new XmlSerializer(typeof(MyClass));

using (var writer = new StreamWriter("file.path"))
using (var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings { Indent = false }))
{
    serializer.Serialize(xmlWriter, myObject);
}

XmlWriterSettings 上还有一些你可能想要探索的选项。

评论

3赞 sluki 9/2/2014
我认为 Indent 默认为 false,因为我的代码与您的代码相同(没有设置)并希望对其进行格式化,因此我不得不将 Indent 更改为 true。
5赞 Xavier Poinas 3/1/2016
是的,默认情况下缩进是假的,所以我想它可以从上面的代码中省略。但是,如果您使用没有明确给它一个 ,它将使用自己的并默认启用格式化/缩进。XmlWritterSettingsXmlSerializerXmlWriter
0赞 Kristoffer Jälén 11/2/2020
@XavierPoinas关于默认值的评论非常重要。
0赞 Aaron Gage 3/24/2011 #3

解析生成的 XML 并删除换行符和制表符很简单......
使用'Indent = false',仍然会把元素放在换行符上吗?

评论

0赞 Aaron Gage 3/24/2011
好的,似乎缩进选项控制的不仅仅是缩进......也许名字不好?