防止XmlSerializer格式化输出

19 浏览
0 Comments

防止XmlSerializer格式化输出

使用XmlSerializer的默认设置时,它会将XML输出为格式化值。即如下所示:\n\n\n \n 12345\n 10.32\n \n \n 45632\n 5.43\n \n\n如何阻止任何类型的格式化输出?所以我希望实现的效果是这样的:\n12345610.57789123133.22\n编辑:我的方法的完整代码是\npublic static String Serialize(Stock stock)\n{\n XmlSerializer serializer = new XmlSerializer(typeof(Stock));\n using (StringWriter stringWriter = new StringWriter())\n {\n serializer.Serialize(stringWriter, stock);\n return stringWriter.ToString();\n } \n}

0
0 Comments

问题:Prevent XmlSerializer from formatting output

原因:XmlSerializer默认会对输出的XML进行格式化,即添加缩进和换行符。但有时候我们希望输出的XML是没有格式化的,即不添加缩进和换行符。

解决方法:

1. 创建一个XmlWriterSettings对象,并将Indent属性设置为false,表示禁用缩进。

2. 使用XmlWriter.Create方法创建一个XmlWriter对象,并将XmlWriterSettings对象作为参数传入。

3. 在使用XmlSerializer进行序列化时,将创建的XmlWriter对象作为参数传入。

代码示例:

XmlSerializer xmlser = new XmlSerializer(...);
XmlWriterSettings settings = new XmlWriterSettings {Indent = false};
using (XmlWriter xw = XmlWriter.Create(stream, settings))
{
    // 进行序列化操作
    xmlser.Serialize(xw, objectToSerialize);
}

这样,使用XmlSerializer进行序列化时,输出的XML将没有格式化,即没有缩进和换行符。

0
0 Comments

XmlSerializer类在序列化对象时,默认会对输出的XML进行格式化,即增加换行符和缩进。但有时我们希望禁止这种格式化,即输出的XML是紧凑的,没有任何额外的空格、换行符、制表符等。

出现这个问题的原因是XmlSerializer类的Indent属性的默认值为true,即默认情况下会格式化输出。如果我们希望禁止格式化,需要将Indent属性设置为false。

解决方法如下:

XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
serializer.Formatting = Formatting.None;
serializer.Serialize(xmlWriter, myObject);

0
0 Comments

问题的出现原因:在使用XmlSerializer进行序列化时,输出的XML文档会自动进行格式化和缩进,这可能不是我们所期望的。

解决方法:通过设置XmlWriterSettings中的Indent属性为false,可以防止XmlSerializer对输出进行格式化。

具体代码如下:

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

除了Indent属性外,XmlWriterSettings还有其他一些选项可以进行探索。默认情况下,Indent属性值为false,所以上述代码中可以省略Indent的设置。但是,如果在使用XmlSerializer时没有明确提供XmlWriter对象,它会使用自己的XmlWriter并默认启用格式化和缩进。

关于默认值的评论非常重要。

0