DataContractJsonSerializer和JsonConvert产生不同的结果

4

我有一个像这样的方法。

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获得相同的结果。


Json.NET 中,是否有可能同时更改序列化和反序列化的端点? - Yuval Itzchakov
Json.NET的类型提示格式是硬编码的。请参见特殊属性($type)的格式是硬编码的 - dbc
1个回答

0
将以下设置传递给 DataContractJsonSerializer,您就不会得到任何类型信息:
DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings()
{
    EmitTypeInformation = EmitTypeInformation.Never
};

2
我认为OP确实想要发出类型信息,只是以不同的结构形式。 - Yuval Itzchakov
DataContractJsonSerializerSettings是适用于.Net 4.5及更高版本的。另外,我忘了说我正在使用Silverlight 5,所以我不能使用DataContractJsonSerializerSettings - Blast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接