将类结构序列化为 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):

enter image description here

在 XML 文件中更容易查看:

enter image description here

一种解决方法是去掉“最后一个”字符:

bidsXml = bidsXml.Substring(0,bidsXml.Length - 1);

但更好的是了解根本原因并在没有解决方法的情况下解决 - 知道为什么将 NewLine 字符附加到 XML 字符串吗?

** 编辑 **

我能够尝试加载到消费者应用程序中(在此尝试之前,我使用了 API 来导入 XML),并且我收到了一条更有说服力的消息:

您加载的文件是二进制文件,这里无法显示内容

所以我怀疑无法打印的字符以某种方式嵌入到文件/XML 中。当我在 Notepad++ 中打开文件时,我看到以下内容(UFF-8 字节顺序标记)——至少我还有事情要做

enter image description here

解决方法

因此,我的 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))")