如何在C#中读取json数据 [英] How to read json data in C#

查看:97
本文介绍了如何在C#中读取json数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I am new to json and am trying to write code to import a file which looks like the following:
<pre lang="xml">
{
 "name": "John", 
 "joined": "2010/5/4 21:57:34", 
 "title": "Area Manager",
 "languages": [{"id":1,"name":"C#"},{"id":2,"name":"VB.NET"}],

 "speaks":
   [
    {"id":5,"language":"English"},
    {"id":6,"language":"French"}
   ],
 "products":
   [
    {"product_id":"36847f8001cd1","name":"Bolt Free"},
    {"product_id":"36847f8001cd7","name":"Oil4All"}
   ],
 "areas":
   {"countries":
      [
        {"iso_3166_1":"US", "release_date":"1997-02-13"},
        {"iso_3166_1":"DE", "release_date":"1997-05-21"},
      ]
   }
}





使用NuGet我已经安装了Newton.Json包。读取文件的代码如下所示:



Using NuGet I have installed the Newton.Json package. The code to read the file looks like this:

using (System.IO.StreamReader r = new System.IO.StreamReader(src))
{
    string json = r.ReadToEnd();
                EmployeeInfo item = Newtonsoft.Json.JsonConvert.DeserializeObject<EmployeeInfo>(json);
}





Item类定义如下:



The Item class is defined as follows:

public class EmployeeInfo
{
    public string name;
    public DateTime joined;
    public String title;
    public List<Languages> languages;
    public List<Speaks> speaks;
    public List<Products> products;
    public List<Areas> areas;

    public class Languages
    {
        public int id;
        public String name;
    }

    public class Speaks
    {
        public int id;
        public String language;
    }

    public class Products
    {
        public String product_id;
        public String name;
    }

    public class Areas
    {
        public String iso_3166_1;
        public DateTime release_date;
    }
}







当我运行代码时,我得到一个未处理的异常说:

无法将当前JSON对象(例如{name:value})反序列化为类型'System.Collections.Generic.List`1 [WindowsFormApp.EmployeeInfo + Areas] '因为类型需要JSON数组(例如[1,2,3])才能正确反序列化。

要修复此错误,请将JSON更改为JSON数组(例如[1,2,3] ])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,不是像数组或List< T>这样的集合类型),可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。

任何人都可以告诉我我做错了什么以及如何正确地反序列化最后一项?

提前致谢。

推荐答案

区域是一个具有属性 countries 的对象,它是 string 的数组日期所以你应该添加

areas is an object with a property countries which is an array of string and date so you should add
public class arr 
{
        public String iso_3166_1;
        public DateTime release_date;
}

public class Areas
{
    public List<arr> countries;
}


// and your type is 
public class EmployeeInfo
{
    public string name;
    public DateTime joined;
    public String title;
    public List<languages> languages;
    public List<speaks> speaks;
    public List<products> products; 
    public Areas areas;
}
</products></speaks></languages>


将其转换为这样的数据集,然后您可以轻松地从数据集中获取数据.. :)



如何使用JSON字符串转换为数据集c# [ ^ ]
convert it into dataset like this and then you can easily get data from dataset.. :)

How to Convert JSON String into Dataset using c#[^]


嗨...

http://stackoverflow.com/questions/4109807/parsing-j son-data-with-c-sharp [ ^ ]

http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object [ ^ ]

谢谢你。
Hi...
http://stackoverflow.com/questions/4109807/parsing-json-data-with-c-sharp[^]
http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object[^]
Thank u.


这篇关于如何在C#中读取json数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆