使用XmlWriterSettings和XmlSerializer编写XML片段会产生额外的字符
我需要编写一个XML片段供Web服务使用。 任何xml声明都会导致Web服务拒绝该请求。 为了支持这一点,我有以下课程:
public class ContentQueryCriteria { public int Type { get; set; } public string Value { get; set; } public int Condition { get; set; } }
这允许我设置请求标准,然后得到结果。
代码使用如下:
ContentQueryCriteria content = new ContentQueryCriteria(); content.Type = 1; content.Value = "NAVS500"; content.Condition = 1; string requestBody = SerializeToString(content); Console.WriteLine(requestBody);
当我将其序列化为XML文件时,我得到了正确的响应,没有XML声明或任何名称空间。 但是,我宁愿捕获内存流中的数据,而不是文件。
使用以下方法(取自https://www.codeproject.com/Articles/58287/XML-Serialization-Tips-Tricks )我能够取得成果,但出于某种原因,我有一个? 列为字符串的一部分。
public static string SerializeToString(object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); MemoryStream ms = new MemoryStream(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.Encoding = Encoding.Unicode; XmlWriter writer = XmlWriter.Create(ms, settings); serializer.Serialize(writer, obj, ns); return Encoding.Unicode.GetString(ms.ToArray()); }
结果字符串是:
?1NAVS5001
如果我设置OmitXmlDeclaration = false我得到以下字符串:
?1NAVS5001
任何人都可以帮我确定额外的原因吗? 在那里,我怎么能删除它?
使用没有BOM的SerializeToString方法
public static string SerializeToString(object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); MemoryStream ms = new MemoryStream(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; settings.Encoding = new UnicodeEncoding(bigEndian: false, byteOrderMark: false); XmlWriter writer = XmlWriter.Create(ms, settings); serializer.Serialize(writer, obj, ns); return Encoding.Unicode.GetString(ms.ToArray()); }
您将BOM(字节顺序掩码)视为从流的字节数组转换的字符串中的第一个字符。
关闭输出BOM,你会没事的。
使用不生成BOM的编码对象: UnicodeEncoding
上述就是C#学习教程:使用XmlWriterSettings和XmlSerializer编写XML片段会产生额外的字符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
settings.Encoding = new UnicodeEncoding(bigEndian:false,byteOrderMark:true)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/960918.html