DataContractJsonSerializer和JsonConvert给出了不同的结果

时间:2015-09-17 08:46:16

标签: 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转换为字符串结果,如: {"Username":"UserName","Password":"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可以获得相同的结果。

1 个答案:

答案 0 :(得分:0)

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

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