如何解决将类结构序列化为 XML 似乎添加了一个换行符
下面的代码将 XML 序列化为一个字符串,然后将其写入一个 XML 文件(是的,关于 UTF8 和命名空间的删除有很多):
var bidsXml = string.Empty;
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
activity = $"Serialize Class INFO to XML to string";
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream,Encoding.UTF8))
{
XmlSerializer xml = new XmlSerializer(info.GetType());
xml.Serialize(writer,info,emptyNamespaces);
bidsXml = Encoding.UTF8.GetString(stream.ToArray());
}
var lastChar = bidsXml.Substring(bidsXml.Length);
var fileName = $"CostOffer_Testing_{DateTime.Now:yyyy.MM.dd_HH.mm.ss}.xml";
var path = $"c:\\temp\\pjm\\{fileName}";
File.WriteAllText(path,bidsXml);
问题是,序列化到 XML 似乎引入了 CR/LF (NewLine):
在 XML 文件中更容易查看:
一种解决方法是去掉“最后一个”字符:
bidsXml = bidsXml.Substring(0,bidsXml.Length - 1);
但更好的是了解根本原因并在没有解决方法的情况下解决 - 知道为什么将 NewLine 字符附加到 XML 字符串吗?
** 编辑 **
我能够尝试加载到消费者应用程序中(在此尝试之前,我使用了 API 来导入 XML),并且我收到了一条更有说服力的消息:
您加载的文件是二进制文件,这里无法显示内容。
所以我怀疑无法打印的字符以某种方式嵌入到文件/XML 中。当我在 Notepad++ 中打开文件时,我看到以下内容(UFF-8 字节顺序标记)——至少我还有事情要做:
解决方法
因此,我的 XML 的使用者似乎不希望流中存在 BOM(字节顺序标记)。
访问此网站 UTF-8 BOM adventures in C#
我已更新我的代码以使用 new UTF8Encoding(false)) 而不是 Encoding.UTF8:
let input = "2015-06-20T00:47:00.484Z"
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
print("ConvertedOutput: \(dateFormatter.date(from: input))")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。