C# 从.JSON文件反序列化JSON并将成员添加到列表对象

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

我有一个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
{
    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。