C# 从.JSON文件反序列化JSON并将成员添加到列表对象
我有一个JSON文件,已经复制到我的项目中。它包含如下数据 {u id:707860,“姓名”:“Hurzuf”,“国家”:“UA”,“coord”:{“lon”:34.28333,“lat”:44.549999}} {{{{{}id:519188,name:“Novinki”,“country:“RU”,“coord:{“lon”:37.66666 8,“lat”:55.683334}} 它有20000行这样的行 这些是我的课C# 从.JSON文件反序列化JSON并将成员添加到列表对象,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,我有一个JSON文件,已经复制到我的项目中。它包含如下数据 {u id:707860,“姓名”:“Hurzuf”,“国家”:“UA”,“coord”:{“lon”:34.28333,“lat”:44.549999}} {{{{{}id:519188,name:“Novinki”,“country:“RU”,“coord:{“lon”:37.66666 8,“lat”:55.683334}} 它有20000行这样的行 这些是我的课 public class Rootobject { pub
public class Rootobject
{
public int _id { get; set; }
public string name { get; set; }
public string country { get; set; }
public Coord coord { get; set; }
}
public class Coord
{
public float lon { get; set; }
public int lat { get; set; }
}
我要做的是从文件中反序列化json数据,并将其放入列表对象中
这就是我反序列化数据的方式
var result = JsonConvert.DeserializeObject<Rootobject>(File.ReadAllText("list_city.json"));
var result=JsonConvert.DeserializeObject(File.ReadAllText(“list_city.json”);
它说foreach不能对RootObject类型的变量进行操作,因为RootObject不包含“GetEnumerator”的公共定义
我在这里遗漏了什么?这取决于文件的格式 您正在尝试反序列化列表。 为此,必须指定要兼容的类型。尝试:
var result = JsonConvert.DeserializeObject<List<Rootobject>>(File.ReadAllText("list_city.json"));
var result=JsonConvert.DeserializeObject(File.ReadAllText(“list_city.json”);
如果这不起作用,并且每行都有独立的JSON,您可以尝试:
public IEnumerable<RootObject> ReadAllCities()
{
var lines = File.ReadAllLines("list_city.json");
foreach (var line in lines)
{
yield return JsonConvert.DeserializeObject<Rootobject>(line);
}
}
public IEnumerable ReadAllCities()
{
var lines=File.ReadAllLines(“list_city.json”);
foreach(行中的var行)
{
返回JsonConvert.DeserializeObject(行);
}
}
我认为您必须逐行反序列化此文件。该文件不包含任何Rootobject集合、数组等。整个文件似乎不包含正确的json,但每行都包含独立的Rootobject表示
那么,试试这样的方法:
string[] rows = File.ReadAllLines("Input.txt");
List<Rootobject> rootobjects = new List<Rootobject>();
foreach (string row in rows)
rootobjects.Add(JsonConvert.DeserializeObject<Rootobject>(row));
string[]rows=File.ReadAllLines(“Input.txt”);
List rootobjects=new List();
foreach(行中的字符串行)
添加(JsonConvert.DeserializeObject(行));
您需要获取行并将其转换为Json数组,以便将其转换为列表
public class Coord
{
public double lon { get; set; }
public double lat { get; set; }
}
public class City
{
public int _id { get; set; }
public string name { get; set; }
public string country { get; set; }
public Coord coord { get; set; }
}
public class RootObject
{
public IList<City> cities { get; set; }
}
//get the lines from the file.
var lines = System.IO.File.ReadAllLines("list_city.json");
//format the lines into a proper JSON array
string json = string.Format("{cities:[{0}]}", string.Join(",", lines));
var result = JsonConvert.DeserializeObject<Rootobject>(json);
公共类协作
{
公共双lon{get;set;}
公共双lat{get;set;}
}
公营城市
{
公共int_id{get;set;}
公共字符串名称{get;set;}
公共字符串国家{get;set;}
公共坐标{get;set;}
}
公共类根对象
{
公共IList城市{get;set;}
}
//从文件中获取行。
var lines=System.IO.File.ReadAllLines(“list_city.json”);
//将行格式化为适当的JSON数组
string json=string.Format(“{cities:[{0}]}”,string.Join(“,”行));
var result=JsonConvert.DeserializeObject(json);
假设您的JSON没有在问题中未显示的外部[]
,则这是和的副本。另请参见。还有。顺便说一下,Coord.lat
也应该是float
而不是int
。@dbc将其更改为double。