提问人:Maxim Gershkovich 提问时间:3/24/2011 最后编辑:Jacek PrzemienieckiMaxim Gershkovich 更新时间:4/30/2019 访问量:27003
阻止 XmlSerializer 设置输出格式
Prevent XmlSerializer from formatting output
问:
将默认设置与 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();
}
}
答:
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
不是很直观,但属性控制整个格式:Indent
XmlWriterSettings
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
是的,默认情况下缩进是假的,所以我想它可以从上面的代码中省略。但是,如果您使用没有明确给它一个 ,它将使用自己的并默认启用格式化/缩进。XmlWritterSettings
XmlSerializer
XmlWriter
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
好的,似乎缩进选项控制的不仅仅是缩进......也许名字不好?
评论