【发布时间】:2018-03-27 19:43:47
【问题描述】:
我正在尝试反序列化我项目中的一个本地文件,该文件是一个 json 文件。但是我在当前代码中遇到了这个错误:
"解析值时遇到意外字符:G.Path '', line 0, position 0"
C#代码
string filepath = Application.StartupPath + @"\city.list.json";
for(int i = 0; i< 40; i++)
{
foreach (string x in File.ReadLines(filepath))
{
if(x.Contains("id") || x.Contains("name"))
{
var data = JsonConvert.DeserializeObject<City.values>(filepath);
//City city = JsonConvert.DeserializeObject<City>(File.ReadAllText(filepath));
//cityList.Add(data.name, data.id);
}
else
{
}
}
}
class City
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class values
{
[JsonProperty(PropertyName = "id")]
public string id { get; set; }
[JsonProperty(PropertyName = "name")]
public string name { get; set; }
}
}
我试图反序列化的 Json 文件。这只是从文件中提取的一个快速示例。挺大的^^
[
{
"id":707860,
"name":"Hurzuf",
"country":"UA",
"coord":{
"lon":34.283333,
"lat":44.549999
}
},
{
"id":519188,
"name":"Novinki",
"country":"RU",
"coord":{
"lon":37.666668,
"lat":55.683334
}
},
【问题讨论】:
-
你需要一个包含 City 数组的类,但你目前没有
-
这里出了点问题,为什么要逐行读取文件却反序列化
filePath?您应该将所有文本读入一个字符串并反序列化,不需要循环。 -
感谢 Ron 的优化建议:D,嗯,文件有 180 万行长,所以我只是想获取文件中的前 40 行,这就是我做 for 循环的原因。我还能按照你的方式做,只是让前 40 行没有循环吗?
-
否,因为从 JSON 文件中随机抽取“块”不是有效的 JSON,所以会缺少右括号。
-
你明白吗,你在循环中读取文件 40 次,然后对于每个字符串,你想反序列化该字符串(json 的一部分),而是反序列化文件的路径......?
标签: c# json serialization