Jad*_*ias 11 .net c# wcf serialization character-encoding
写入流时,DataContractSerializer使用与Unicode-16不同的编码.如果我可以强制它写/读Unicode-16,我可以将它存储在SQL CE的binary列中并用它读取SELECT CONVERT(nchar(1000), columnName).但是它的方式,除了编程之外我无法阅读它.
我可以更改使用的编码System.Runtime.Serialization.DataContractSerializer吗?
car*_*ira 12
DataContractSerializer的WriteObject方法具有写入a Stream或XmlWriter(和XmlDictionaryWriter)的重载.在Stream过载将默认为UTF-8,所以你需要使用另一个.使用以UTF-16编写XML的XML Writer实例可以满足您的需要,因此您可以执行@Phil建议的操作,也可以使用XmlDictionaryWriter.CreateTextWriter您传递的编写器Encoding.Unicode作为参数.
public class StackOverflow_10089682
{
[DataContract(Name = "Person", Namespace = "http://my.namespace")]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
public static void Test()
{
MemoryStream ms = new MemoryStream();
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.Unicode);
DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
Person instance = new Person { Name = "John Doe", Age = 33 };
dcs.WriteObject(writer, instance);
writer.Flush(); // Don't forget to Flush the writer here
Console.WriteLine("Decoding using UTF-16: {0}", Encoding.Unicode.GetString(ms.ToArray()));
}
}
Run Code Online (Sandbox Code Playgroud)
您是否尝试过使用 XmlWriterSettings?就像是
var s = new DataContractSerializer (typeof(Thing));
using(var wr = XmlTextWriter.Create(
@"test.xml", new XmlWriterSettings{Encoding=Encoding.UTF32}))
{
s.WriteObject(wr, new Thing{Foo="bar"});
}
public class Thing
{
public string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
指定您需要的编码。
| 归档时间: |
|
| 查看次数: |
6233 次 |
| 最近记录: |