我正在使用此代码将XML序列化为字符串:
XmlWriterSettings XmlWriterSettings=新的XmlWriterSettings
{
缩进=真,
Encoding=Encoding.UTF8
};
使用(var sw=new StringWriter())
{
使用(XmlWriter=XmlWriter.Create(sw,xmlWriterSettings))
{
XmlSerializer XmlSerializer=新的XmlSerializer(moviesObject.GetType(),新的XmlRootAttribute(“类别”);
序列化(xmlWriter,moviesObject);
}
返回sw.ToString();
}
问题是我得到了:
<;?xml version=“1.0”encoding=“utf-16”?>;
<;类别xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“xmlns:xsd=”http://www.w3.org/2001/XMLSchema“havemore=”否“>;
<;项目>;
<;电影>;
<;videoid>;videoid1</videoid>;
<;标题>;标题1</标题>;
</电影>;
</项目>;
</类别>;
有任何方法可以更改<;?xml version=“1.0”encoding=“utf-16”?>
到
<;?xml version=“1.0”encoding=“utf-8”?>
这是一个以编码为参数的代码。请阅读注释,了解为什么存在用于代码分析的SuppressMessage
//<;总结>;
///将对象序列化为XML字符串
///</总结>;
///<;typeparam name=“T”>;要序列化的对象的类型。</typeparam>;
///<;参数name=“obj”>;要序列化的对象。</参数>;
///<;参数name=“enc”>;序列化输出的编码。</参数>;
///<;退货>;序列化(xml)对象。</退货>;
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Usage”,“CA2202:不要多次处理对象”)]
内部静态字符串序列化对象<;T>;(T obj,编码enc)
{
使用(MemoryStream ms=new MemoryStream())
{
XmlWriterSettings XmlWriterSettings=new System.Xml.XmlWriterSettings()
{
//如果设置为true,XmlWriter将自动关闭MemoryStream,然后使用将执行双重处置
//代码分析不理解这一点。这就是为什么会出现抑制消息。
CloseOutput=false,
编码=enc,
OmitXmlDeclaration=false,
缩进=真
};
使用(System.Xml.XmlWriter xw=System.Xml.XmlWriter.Create(ms,XmlWriter设置))
{
XmlSerializer s=新的XmlSerializer(typeof(T));
s、 序列化(xw,obj);
}
返回enc.GetString(ms.ToArray());
}
}