我目前正在尝试将类序列化为XML以发布到php Web服务。
每当我使用XMLSerializer进行正常的序列化时,XML声明总是出现在XML文档的第一行(类似于<?xml ....?>
)。我测试了XML并且无法使其工作,因为端点不接受XML声明,我无法做任何事情。
我老实说,我不熟悉C#中的XML序列化。
因此,我使用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
并避免转义双引号\"
提前感谢您的建议。
西蒙
答案 0 :(得分:1)
尝试以下设置
settings.NewLineHandling = NewLineHandling.None;
settings.CheckCharacters = false;