完成阅读JSON内容后遇到的其他文本:

How*_*Hee 19 c# json json.net

我在使用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)

  • 如何帮助他而不是打字全部.有时人们在开始时不知道如何阅读JSON. (18认同)
  • 在我尝试之后,我得到了新的错误:"无法将当前JSON数组(例如[1,2,3])反序列化为类型'tbl_Staff',因为该类型需要一个JSON对象(例如{"name":"value"要正确反序列化.要修复此错误,请将JSON更改为JSON对象(例如{"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection, IList)像List <T>一样可以从JSON数组反序列化.JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化." (3认同)

dbc*_*dbc 7

11.0.1 版开始,Json.NET 现在原生支持解析逗号分隔的 JSON,就像它支持解析换行分隔的 JSON 一样

新功能 - 添加了对读取多个逗号分隔值的支持JsonReader.SupportMultipleContent

因此,Yuval ItzchakovLine 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()其中,然后将流过文件,分别反序列化每个对象。