我正在尝试反序列化一个包含未用逗号分隔的 JSON 对象数据集的文件
{
"passages": [
{
"is_selected": 1,
"url": "http://someUrl.com",
"passage_text": "someTextHere"
},
{
"is_selected": 0,
"url": "http://someUrl.com",
"passage_text": "someTextHere""
},
],
"query_id": 9749,
"answers": ["Here is the answer"],
"query_type": "description",
"query": "Here is my query"
}
{
"passages": [
{
"is_selected": 0,
"url": "http://someAnotherUrl.com",
"passage_text": "someAnotherTextHere"
},
{
"is_selected": 1,
"url": "http://someAnotherUrl.com",
"passage_text": "someAnotherTextHere""
},
],
"query_id": 0564,
"answers": ["Here is the another answer"],
"query_type": "another description",
"query": "Here is my another query"
}
我正在尝试将此代码与Newtonsoft.JSON反序列化一起使用,但它返回异常
"Newtonsoft.Json.JsonSerializationException"类型为'Newtonsoft.Json.Json'的未处理异常.dll
附加信息:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型"System.Collections.Generic.List'1[JsonParser.DataSet]",因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。
public class DataSet
{
public List<Passage> passages { get; set; }
public int query_id { get; set; }
public List<string> answers { get; set; }
public string query_type { get; set; }
public string query { get; set; }
public int Count { get; internal set; }
}
public class Passage
{
public int is_selected { get; set; }
public Uri url { get; set; }
public string passage_text { get; set; }
}
class Program
{
public static string jsonFileLocation = @"C:my.json";
static void Main(string[] args)
{
using (StreamReader file = File.OpenText(jsonFileLocation))
{
JsonSerializer serializer = new JsonSerializer();
List<DataSet> data = (List<DataSet>)serializer.Deserialize(file, typeof(List<DataSet>));
}
}
}
我认为手动放置逗号和括号以使文件变为 JSON 格式不是一个好主意,因为该文件包含数千条记录。您知道如何解析和反序列化此文件吗?
如果文件一致,因为每个 JSON 节点都用换行符分隔,则可以首先将文件流式传输到 System.String 中,并替换以下各项的所有实例:
}
{
跟:
},
{
然后,反序列化 JSON 字符串。这只是一个想法。