XmlSerializer更改编码

我正在使用此代码将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&lt/videoid>
<标题>标题1&lt/标题>
&lt/电影>
&lt/项目>
&lt/类别>

有任何方法可以更改<?xml version=“1.0”encoding=“utf-16”?&gt

<?xml version=“1.0”encoding=“utf-8”?&gt

这是一个以编码为参数的代码。请阅读注释,了解为什么存在用于代码分析的SuppressMessage

//<总结>
///将对象序列化为XML字符串
///&lt/总结>
///<typeparam name=“T”>要序列化的对象的类型。&lt/typeparam>
///<参数name=“obj”>要序列化的对象。&lt/参数>
///<参数name=“enc”>序列化输出的编码。&lt/参数>
///<退货>序列化(xml)对象。&lt/退货>
[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());
}
}

发表评论