避免 XML 转义双引号
Avoid XML Escape Double Quote
我目前正在尝试将 class 序列化为 XML 以发布到 php 网络服务。
每当我使用 XMLSerializer 进行正常序列化时,XML 声明总是出现在 XML 文档的第一行(类似于 <?xml ....?>
) .我测试了 XML 但无法使其正常工作,因为端点不接受 XML 声明,我对此无能为力。
老实说,我不熟悉 XML C# 中的序列化。
因此,我使用 XMLWriter 来执行以下操作:-
private string SerializeClassToString(GetRiskReport value)
{
var emptyNS = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var ser = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
{
using (var writer = XmlWriter.Create(stream, settings))
{
ser.Serialize(writer, value, emptyNS);
return stream.ToString();
}
}
}
命名空间的结果是
<GetRiskReport FCRA=\"false\" ReturnResultsOnly=\"false\" Monitoring=\"false\">
...我可以省略 XML 声明,但是我遇到了 2 个新问题。
我得到了换行的 \r\n
,并且我已经转义了双引号,例如 ReturnResultsOnly=\"false\" Monitoring=\"false\"
,端点也无法处理它。
我想问的是,有谁能告诉我如何更改 XmlWriterSetting 以省略 XML 声明,避免 \r\n
并避免转义双引号 \"
提前感谢您的建议。
西蒙
尝试使用以下设置
settings.NewLineHandling = NewLineHandling.None;
settings.CheckCharacters = false;
我目前正在尝试将 class 序列化为 XML 以发布到 php 网络服务。
每当我使用 XMLSerializer 进行正常序列化时,XML 声明总是出现在 XML 文档的第一行(类似于 <?xml ....?>
) .我测试了 XML 但无法使其正常工作,因为端点不接受 XML 声明,我对此无能为力。
老实说,我不熟悉 XML C# 中的序列化。
因此,我使用 XMLWriter 来执行以下操作:-
private string SerializeClassToString(GetRiskReport value)
{
var emptyNS = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var ser = new XmlSerializer(value.GetType());
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (var stream = new StringWriter())
{
using (var writer = XmlWriter.Create(stream, settings))
{
ser.Serialize(writer, value, emptyNS);
return stream.ToString();
}
}
}
命名空间的结果是
<GetRiskReport FCRA=\"false\" ReturnResultsOnly=\"false\" Monitoring=\"false\">
...我可以省略 XML 声明,但是我遇到了 2 个新问题。
我得到了换行的 \r\n
,并且我已经转义了双引号,例如 ReturnResultsOnly=\"false\" Monitoring=\"false\"
,端点也无法处理它。
我想问的是,有谁能告诉我如何更改 XmlWriterSetting 以省略 XML 声明,避免 \r\n
并避免转义双引号 \"
提前感谢您的建议。
西蒙
尝试使用以下设置
settings.NewLineHandling = NewLineHandling.None;
settings.CheckCharacters = false;