我正在处理的一个项目遇到了同样的问题,我按照此页面上的建议解决了这个问题: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()
它时,它会使用反射来完成工作(当你有许多具有许多属性的对象时,它真的可以加起来)。
无论如何...一旦我编写了自己的序列化程序,我使用 JsonConvert.SerializeObject() 方法对 250 个单词的列表进行序列化的时间从 28 秒变为使用我自己的函数的 31 毫秒。