c# - 如何更改 DataContractSerializer 文本编码?

标签 c# .net wcf serialization character-encoding

当写入流时,DataContractSerializer 使用不同于 Unicode-16 的编码。如果我可以强制它写入/读取 Unicode-16,我可以将它存储在 SQL CE 的 binary 列中并使用 SELECT CONVERT(nchar(1000), columnName) 读取它.但事实上,我无法阅读它,除非以编程方式阅读。

我可以更改 System.Runtime.Serialization.DataContractSerializer 使用的编码吗?

最佳答案

DataContractSerializer 的 WriteObject 方法具有写入到 StreamXmlWriter(和 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/

相关文章:

.net - Powershell 远程命令

.net - 如何调试 WCF 问题?

c# - 结合C# Windows Form应用程序,主解决方案

C# WPF - 如何发送电子邮件(给我自己)?

c# - 在 C# winform 中在运行时更改语言

c# - 以编程方式创建和启动 RDP session (无 gui)

.net - 还有其他原因说明我应该考虑忽略发出默认值是一种不好的做法吗?

.net - 你能拦截WCF消息对象的创建吗? (服务器端)

c# - 用 IEnumerable/yield 解释这种奇怪的行为

存在多个同名元素的 C# Linq XML 查询