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

c# – DataContractJsonSerializer和JsonConvert给出不同的结果

发布时间:2020-12-15 20:55:32 所属栏目:百科 来源:网络整理
导读:我有这样的方法. using (MemoryStream memoryStream = new MemoryStream()){ DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(typeof(Message),this.knowTypes); dataContractSerializer.WriteObject(memoryStream,mes
我有这样的方法.

using (MemoryStream memoryStream = new MemoryStream())
{
    DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(typeof(Message),this.knowTypes);
    dataContractSerializer.WriteObject(memoryStream,message);

    byte[] byteArray = memoryStream.ToArray();
    memoryStream.Close();
    return byteArray;
}

当我将byteArray转换为字符串时,结果如下所示:
{ “__type”: “登录:#Project.ProjectName.Sockets”,“密码”: “F9AAD6B7CFBD2A756101”,“用户名”: “用户名”}

这个结果对我的服务器有意义.

但是,由于某些字符问题,我想更改此代码.

byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message));
return byteArray;

现在我将byteArray转换为字符串结果,如:
{ “用户名”: “用户名”,“密码”: “F9AAD6B7CFBD2A756101”}

我也试过使用JsonSerializerSettings

settings = new JsonSerializerSettings();
 settings.TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full;
 settings.TypeNameHandling = TypeNameHandling.Objects;

结果是
{“$type”:“Project.ProjectName.Sockets.Login,ProjectName”,“用户名”:“用户名”,“密码”:“F9AAD6B7CFBD2A756101”}

DataContractJsonSerializer和JsonConvert之间有什么区别,使用JsonConvert可以获得相同的结果.

解决方法

将以下设置传递给DataContractJsonSerializer,您永远不应获取任何类型信息:

DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings()
{
    EmitTypeInformation = EmitTypeInformation.Never
};

(编辑:李大同)

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

    推荐文章
      热点阅读