我的数据实体包含一个字典,但 XmlSerializer 不支持它们开箱即用。所以我决定使用 DataContractSerializer。问题是我无法让它按照我的需要运行。
我从以下代码开始:
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
using (var stm = new XmlTextWriter(writer))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
它似乎工作正常,直到我注意到如果我将“\r\n”放在一个字符串中,它不会被序列化为 XML 实体。根据我使用 XmlSerializer 的经验,我知道我可以使用 NewLineHandling = NewLineHandling.Entitize 设置 XmlWriterSettings。所以我将我的代码转换为以下内容:
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
{
using (var stm = XmlWriter.Create(writer,
new XmlWriterSettings()
{
NewLineHandling = NewLineHandling.Entitize
}))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
}
现在的问题是我得到一个空字符串。没有例外,没有 - 只是一个空字符串。stm 变量保存 XmlWellFormedWriter。也许 DataContractSerializer 不支持它?
然后我尝试执行 XmlTextWriter 如下:
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
using (var stm = XmlWriter.Create(new XmlTextWriter(writer),
new XmlWriterSettings()
{
NewLineHandling = NewLineHandling.Entitize
}))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
这让我回到了开始的地方——我取回了 XML 字符串,但“\r\n”字符串又没有被转换为实体。
如何使 DataContractSerializer 实体化换行符并将 XML 作为字符串返回?