Gle*_*ven 26 c# xmlwriter xml-serialization
我有这种扩展方法
public static string SerializeObject<T>(this T value)
{
var serializer = new XmlSerializer(typeof(T));
var settings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(true),
Indent = false,
OmitXmlDeclaration = false,
NewLineHandling = NewLineHandling.None
};
using(var stringWriter = new StringWriter())
{
using(var xmlWriter = XmlWriter.Create(stringWriter, settings))
{
serializer.Serialize(xmlWriter, value);
}
return stringWriter.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
但每当我调用它时,它都有一个utf-16指定的编码,即<?xml version="1.0" encoding="utf-16"?>.我究竟做错了什么?
Joh*_*ers 16
字符串是UTF-16,因此写入StringWriter将始终使用UTF-16.如果那不是你想要的,那么使用你想要TextWriter的编码来使用其他派生类.
Boj*_* Li 15
据我所知,StringWriter类在序列化为字符串时将始终使用UTF 16编码.您可以编写自己的覆盖类,接受不同的编码:
public class StringWriterWithEncoding : StringWriter
{
private readonly Encoding _encoding;
public StringWriterWithEncoding()
{
}
public StringWriterWithEncoding(IFormatProvider formatProvider)
: base(formatProvider)
{
}
public StringWriterWithEncoding(StringBuilder sb)
: base(sb)
{
}
public StringWriterWithEncoding(StringBuilder sb, IFormatProvider formatProvider)
: base(sb, formatProvider)
{
}
public StringWriterWithEncoding(Encoding encoding)
{
_encoding = encoding;
}
public StringWriterWithEncoding(IFormatProvider formatProvider, Encoding encoding)
: base(formatProvider)
{
_encoding = encoding;
}
public StringWriterWithEncoding(StringBuilder sb, Encoding encoding)
: base(sb)
{
_encoding = encoding;
}
public StringWriterWithEncoding(StringBuilder sb, IFormatProvider formatProvider, Encoding encoding)
: base(sb, formatProvider)
{
_encoding = encoding;
}
public override Encoding Encoding
{
get { return (null == _encoding) ? base.Encoding : _encoding; }
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以用它代替:
using(var stringWriter = new StringWriterWithEncoding( Encoding.UTF8))
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16851 次 |
| 最近记录: |