【发布时间】:2014-10-17 14:29:35
【问题描述】:
我一直在尝试找出使用 JSon.net 从包含 Json 的文件中存储和检索数据的最佳方法。在我的研究中,我发现了几种方法。
- http://www.drdobbs.com/windows/parsing-big-records-with-jsonnet/240165316
- http://www.ngdata.com/parsing-a-large-json-file-efficiently-and-easily/Jackson Api(仅适用于 Java)
这种方法中的任何一种都可以与 Json.Net 一起使用吗? DrDoobs 上的文章是否有可用的实际实现?我想不通 HandleToken(reader.TokenType, reader.Value) 方法。
当前统计:
编写大小约为 60Mb 的 Json 大约需要 5 分钟
读取 Json 大约需要 3 分钟。
当前代码:
public static T DeserializeJsonFromStream<T>(Stream s)
{
using (StreamReader reader = new StreamReader(s))
{
using (JsonTextReader jsonReader = new JsonTextReader(reader))
{
JsonSerializer ser = new JsonSerializer();
ser.Formatting = Newtonsoft.Json.Formatting.None;
ser.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
ser.TypeNameHandling = TypeNameHandling.All;
ser.NullValueHandling = NullValueHandling.Ignore;
ser.Error += ReportJsonErrors;
ser.DateFormatHandling = DateFormatHandling.IsoDateFormat;
return ser.Deserialize<T>(jsonReader);
}
}
}
public static void SerializeJsonIntoStream(object value, Stream s)
{
using (StreamWriter writer = new StreamWriter(s))
{
using (JsonTextWriter jsonWriter = new JsonTextWriter(writer))
{
JsonSerializer ser = new JsonSerializer();
ser.Formatting = Newtonsoft.Json.Formatting.None;
ser.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
ser.TypeNameHandling = TypeNameHandling.All;
ser.NullValueHandling = NullValueHandling.Ignore;
ser.Error += ReportJsonErrors;
ser.Serialize(jsonWriter, value);
jsonWriter.Flush();
}
}
}
【问题讨论】:
-
文件可能不适合存储和检索大量数据。也许您应该考虑将数据存储在数据库中。
-
我确实尝试将 SqlLite 用于 Windows 商店应用程序,但最终对 SqlLite3.dll 出现的所有异常感到沮丧。
-
在我看来,第二个可以使用 Json.NET 提供的自定义 JsonConverter 来实现。
-
第二个调用 jp.readValueAsTree();这在 JsonReader 下不可用。目前我确实有
-
你可以试试this。
标签: c# json windows-store-apps json.net