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

标签 c# json json.net silverlight-5.0

我有一个这样的方法。

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":"Login:#Project.ProjectName.Sockets","Password":"F9AAD6B7CFBD2A756101","Username":"UserName"

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

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

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","Username":"UserName","Password":"F9AAD6B7CFBD2A756101"}

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

最佳答案

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

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

关于c# - DataContractJsonSerializer 和 JsonConvert 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32626080/

相关文章:

c# - 为什么我的 StringReader 比 .NET StringReader 慢 50us?

c# - 如何分割这个字符串并识别最后一个 '*' 之后的第一个句子?

json - HashMap 与对象?哪个更好用KEY和VALUE最终生成JSON输出

json - 数据逐行而不是成批插入

C# Outlook 不会移动所有电子邮件

c# - Dynamic Func<> for Dapper query map

java - 将嵌套的 JSON 数据转换为 HTML 表

mysql - 在 mysql json 列中搜索以检查数组同一索引上的多个条件

c# - 如何将 JSON 数组或 JSON 对象转换为对象列表?

c# - 将 ASP.NET Web API 2 中值类型 (C#) 的 .MinValue 序列化为 null