gpt4 book ai didi

c# - Json.net 慢序列化和反序列化

转载 作者:可可西里 更新时间:2023-11-01 08:20:05 26 4
gpt4 key购买 nike

我有一个问题 - Json.Net 序列化我的对象真的很慢。我有一些基础类(class):

public class authenticationRequest
{
public string userid;
public string tid;
public string token;
public string platform;
public string version;
}

我正在用

序列化它
string jsonDataToSend = JsonConvert.SerializeObject(dataToSend); 

此操作大约需要 1900 毫秒。与来自 Json.net CodePlex 的信息相比页:

enter image description here

这需要很长时间。出于测试目的,我将我的类换成了一个简单的字符串:

string jsonDataToSend = JsonConvert.SerializeObject("fsdfsdfsdfs");

而且转换仍然需要大约 900 毫秒。是什么原因?我可以做些什么来更快地序列化这些数据?

最佳答案

我正在处理的一个项目遇到了同样的问题,我按照本页上的建议解决了这个问题: http://www.newtonsoft.com/json/help/html/Performance.htm

具体来说,他们建议在性能至关重要时手动序列化您的对象:

public static string ToJson(this Person p)
{
StringWriter sw = new StringWriter();
JsonTextWriter writer = new JsonTextWriter(sw);

// {
writer.WriteStartObject();

// "name" : "Jerry"
writer.WritePropertyName("name");
writer.WriteValue(p.Name);

// "likes": ["Comedy", "Superman"]
writer.WritePropertyName("likes");
writer.WriteStartArray();
foreach (string like in p.Likes)
{
writer.WriteValue(like);
}
writer.WriteEndArray();

// }
writer.WriteEndObject();

return sw.ToString();
}

我在 VB 中的示例如下所示:

    Public Function SerializeWords(ByRef oWords As List(Of Word))
Dim sb As New StringBuilder
Dim sw As New IO.StringWriter(sb)
Using oWriter As Newtonsoft.Json.JsonWriter = New Newtonsoft.Json.JsonTextWriter(sw)
With oWriter
.WriteStartArray()
For Each oWord As Word In oWords
.WriteStartObject()

.WritePropertyName("ID")
.WriteValue(oWord.ID)

.WritePropertyName("Phonics")
.WriteValue(oWord.Phonics)

.WritePropertyName("Word_")
.WriteValue(oWord.Word_)

.WritePropertyName("WordLength")
.WriteValue(oWord.WordLength)

.WriteEndObject()
Next
.WriteEndArray()

End With
End Using
Return sb.ToString

End Function

注意它是如何强类型化的。我相信当你使用Newtonsoft.Json.JsonConvert.SerializeObject()它使用反射来完成工作(当你有许多具有许多属性的对象时,它真的可以加起来)。

无论如何...一旦我编写了自己的序列化程序,我序列化 250 个单词的列表的时间从使用 JsonConvert.SerializeObject() 方法的 28 秒减少到使用我自己的函数的 31 毫秒。

关于c# - Json.net 慢序列化和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com