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

问题描述 投票:19回答:2

我在使用JSON.Net创建时遇到一些问题。当我尝试解析它时,它给了我以下错误:

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

我尝试使用http://json.parser.online.fr/对其进行验证,并显示“ SyntaxError:意外令牌,”。

我的JSON如下:

{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}

如何反序列化?

c# json json.net
2个回答
27
投票

您需要用方括号将其包围,这表示它是一个数组:

    [{"StaffID":"S01","StaffRank":"Manager"},{"StaffID":"S02","StaffRank":"Waiter"}]

2
投票

[从Release 11.0.1开始,Json.NET现在本机支持以逗号分隔的JSON解析,就像支持解析newline delimited JSON一样:]]

[新功能-增加了对使用JsonReader.SupportMultipleContent读取多个逗号分隔值的支持。

因此JsonReader.SupportMultipleContentLine delimited json serializing and de-serializing的回答在这里也应该起作用。定义扩展方法:

Yuval Itzchakov

然后,给定一个数据模型,该数据模型创建为将单个项目保存在逗号分隔的列表中,例如:

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);
            }
        }
    }
}

您可以反序列化显示的JSON字符串,如下所示:

public class RootObject
{
    public string StaffID { get; set; }
    public string StaffRank { get; set; }
}

当从大型文件中反序列化非常大的逗号分隔对象序列时,此方法可能更可取,因为不必将整个文件加载到var jsonString = @"{""StaffID"":""S01"",""StaffRank"":""Manager""},{""StaffID"":""S02"",""StaffRank"":""Waiter""}"; var list = JsonExtensions.FromDelimitedJson<RootObject>(new StringReader(jsonString)).ToList(); 中,然后将string'['添加到开头并结束。在']'中,Newtonsoft建议直接从流中反序列化大文件,因此可以将Performance Tips: Optimize Memory Usage传递到StreamReader中,然后JsonExtensions.FromDelimitedJson()将依次对每个对象进行反序列化。

© www.soinside.com 2019 - 2024. All rights reserved.