当写入流时,DataContractSerializer
使用不同于 Unicode-16 的编码。如果我可以强制它写入/读取 Unicode-16,我可以将它存储在 SQL CE 的 binary
列中并使用 SELECT CONVERT(nchar(1000), columnName)
读取它.但事实上,我无法阅读它,除非以编程方式阅读。
我可以更改 System.Runtime.Serialization.DataContractSerializer
使用的编码吗?
最佳答案
DataContractSerializer 的 WriteObject
方法具有写入到 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()));
}
}
关于c# - 如何更改 DataContractSerializer 文本编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089682/