加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:06:10 所属栏目:百科 来源:网络整理
导读:当写入流时,DataContractSerializer使用与Unicode-16不同的编码.如果我可以强制它编写/读取Unicode-16,我可以将其存储在SQL CE的二进制列中,并使用SELECT CONVERT(nchar(1000),columnName)读取它).但是它的方式,我不能读它,除了程序设计. 可以更改System.Run
当写入流时,DataContractSerializer使用与Unicode-16不同的编码.如果我可以强制它编写/读取Unicode-16,我可以将其存储在SQL CE的二进制列中,并使用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()));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读