我在使用JSON.Net创建时遇到了一些问题.当我尝试解析它时,它会给我以下错误:
完成阅读JSON内容后遇到的其他文本:
我尝试用http://json.parser.online.fr/验证它,它说"SyntaxError:Unexpected token,".
我的JSON如下:
{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}
Run Code Online (Sandbox Code Playgroud)
如何反序列化?
小智 27
你需要用方括号括起来,这表示它是一个数组:
[{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}]
Run Code Online (Sandbox Code Playgroud)
从11.0.1 版开始,Json.NET 现在原生支持解析逗号分隔的 JSON,就像它支持解析换行分隔的 JSON 一样:
新功能 - 添加了对读取多个逗号分隔值的支持
JsonReader.SupportMultipleContent。
因此,Yuval Itzchakov对Line delimited json 序列化和反序列化的答案也应该在这里工作。定义扩展方法:
public static partial class JsonExtensions
{
public static IEnumerable<T> FromDelimitedJson<T>(TextReader reader, JsonSerializerSettings settings = null)
{
using (var jsonReader = new JsonTextReader(reader) { CloseInput = false, SupportMultipleContent = true })
{
var serializer = JsonSerializer.CreateDefault(settings);
while (jsonReader.Read())
{
if (jsonReader.TokenType == JsonToken.Comment)
continue;
yield return serializer.Deserialize<T>(jsonReader);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,给定一个数据模型,用于保存逗号分隔列表中的单个项目,例如:
public class RootObject
{
public string StaffID { get; set; }
public string StaffRank { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以反序列化显示的 JSON 字符串,如下所示:
var jsonString = @"{""StaffID"":""S01"",""StaffRank"":""Manager""},{""StaffID"":""S02"",""StaffRank"":""Waiter""}";
var list = JsonExtensions.FromDelimitedJson<RootObject>(new StringReader(jsonString)).ToList();
Run Code Online (Sandbox Code Playgroud)
从一个大的反序列化文件逗号分隔对象的一个非常大的序列时,这种方法可能是优选的,因为它没有必要将整个文件加载到string再加入'['并']'于开始和结束。在性能提示:优化内存使用中, Newtonsoft 建议直接从流中反序列化大文件,因此StreamReader可以将 a 传入JsonExtensions.FromDelimitedJson()其中,然后将流过文件,分别反序列化每个对象。
| 归档时间: |
|
| 查看次数: |
32487 次 |
| 最近记录: |