我正在寻找一个JSON分析器,该分析器可以让我从大型JSON文件(大小为几百MB)中遍历JSON对象。我从Json.NET尝试了JsonTextReader,如下所示:
JsonTextReader reader = new JsonTextReader(new StringReader(json)); while (reader.Read()) { if (reader.Value != null) Console.WriteLine("Token: {0}, Value: {1}", reader.TokenType, reader.Value); else Console.WriteLine("Token: {0}", reader.TokenType); }
但是它在令牌之后返回令牌。 如果我需要整个对象而不是令牌,有没有更简单的方法?
假设您有一个与此类似的json数组:
[{"text":"0"},{"text":"1"}......]
我将为对象类型声明一个类
public class TempClass { public string text; }
现在,反序列化部分
JsonSerializer ser = new JsonSerializer(); ser.Converters.Add(new DummyConverter<TempClass>(t => { //A callback method Console.WriteLine(t.text); })); ser.Deserialize(new JsonTextReader(new StreamReader(File.OpenRead(fName))), typeof(List<TempClass>));
还有一个伪JsonConverter类来拦截反序列化
public class DummyConverter<T> : JsonConverter { Action<T> _action = null; public DummyConverter(Action<T> action) { _action = action; } public override bool CanConvert(Type objectType) { return objectType == typeof(TempClass); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { serializer.Converters.Remove(this); T item = serializer.Deserialize<T>(reader); _action( item); return null; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } }