Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取JSON对象_C#_Javascript_Asp.net_Asp.net Mvc_Json - Fatal编程技术网

C# 读取JSON对象

C# 读取JSON对象,c#,javascript,asp.net,asp.net-mvc,json,C#,Javascript,Asp.net,Asp.net Mvc,Json,我正在尝试使用JavaScriptSerializer读取JSON对象。目前我无法用代码读取JSON对象 下面是我的JSON对象 {"data":[{"id":17,"name":"RedBug Project","can_modify":true,"description":"","start_date":"1899-01-01T00:00:00Z","due_date":"1899-01-01T00:00:00Z","is_active":true,"parent":{"id":0}},{"

我正在尝试使用JavaScriptSerializer读取JSON对象。目前我无法用代码读取JSON对象

下面是我的JSON对象

{"data":[{"id":17,"name":"RedBug Project","can_modify":true,"description":"","start_date":"1899-01-01T00:00:00Z","due_date":"1899-01-01T00:00:00Z","is_active":true,"parent":{"id":0}},{"id":14,"name":"RedRock","can_modify":true,"description":"","start_date":"1899-01-01T00:00:00Z","due_date":"1899-01-01T00:00:00Z","is_active":true,"parent":{"id":0},"children":[{"id":16,"name":"WEB","can_modify":true,"description":"","start_date":"1899-01-01T00:00:00Z","due_date":"1899-01-01T00:00:00Z","is_active":true,"parent":{"id":14}}]}]}
方法来读取JSON

public Dictionary<string, string> ReadJSONProject(string jsObject)
        {

            var json = jsObject;
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            dynamic jsonObject = serializer.Deserialize<dynamic>(json);

            Dictionary<string, string> dic = new Dictionary<string, string>();

            foreach (var item in jsonObject)
            {
                var a = item;
                dic.Add(item["id"], item["name"]);

            }

            return dic;
        }

参考下面的示例,并根据需要进行修改

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Objects;
using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Runtime.Serialization.Json;
using System.Threading;
using System.Xml;
using ConsoleDemo.Controller;
using ConsoleDemo.Model;
using Microsoft.Practices.Unity;


namespace ConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var data = @"{""Root"": {""data"": [{""CardName"": ""card1"",""functions"": [{""State"": ""OPEN""},{""State"": ""INHERENT""}]},{""CardName"": ""card2"",""functions"": [{""State"": ""CLOSED""},{""State"": ""INHERENT""}]}]}";
            RootClass dynObj = JsonHelper.JsonDeserialize<RootClass>(data); //Get the object
            Console.ReadKey();
        }
    }

    [DataContract]
    public class RootClass
    {
        [DataMember(Name = "Root")]
        public Data Root { get; set; }
    }

    [DataContract]
    public class Data
    {
        [DataMember(Name = "data")]
        public List<Card> data { get; set; }
    }

    [DataContract]
    public class Card
    {
        [DataMember(Name = "CardName")]
        public string CardName { get; set; }

        [DataMember(Name = "functions")]
        public List<Function> Functions { get; set; }
    }

    [DataContract]
    public class Function
    {

        [DataMember(Name = "State")]
        public string State { get; set; }
    }

    public class JsonHelper
    {
        /// <summary>
        /// JSON Serialization
        /// </summary>
        public static string JsonSerializer<T>(T t)
        {
            var ser = new DataContractJsonSerializer(typeof(T));
            var ms = new MemoryStream();
            ser.WriteObject(ms, t);
            var jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            return jsonString;
        }
        /// <summary>
        /// JSON Deserialization
        /// </summary>
        public static T JsonDeserialize<T>(string jsonString)
        {
            var ser = new DataContractJsonSerializer(typeof(T));
            var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            var obj = (T)ser.ReadObject(ms);
            return obj;
        }
    }

}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.Object;
使用System.Data.SqlClient;
利用制度全球化;
使用System.IO;
使用System.Linq;
使用System.Runtime.Serialization;
使用系统文本;
使用System.Runtime.Serialization.Json;
使用系统线程;
使用System.Xml;
使用ConsoleDemo.Controller;
使用ConsoleDemo.Model;
使用Microsoft.Practices.Unity;
名称空间控制台
{
班级计划
{
静态void Main(字符串[]参数)
{
var data=@“{”“根”“:{”“数据”“:[{”“卡片名”“:”“卡片1”“,”“函数”“:[{”“状态”“:”“打开”“},{”“状态”“:”“固有”“}]},{”“卡片名”“:”“卡片2”“,”“函数”“:[{”“状态”“:”“闭合”“},{”“状态”“:”“固有”“}]}”;
RootClass dynObj=JsonHelper.JsonDeserialize(数据);//获取对象
Console.ReadKey();
}
}
[数据合同]
公共类根类
{
[DataMember(Name=“Root”)]
公共数据根{get;set;}
}
[数据合同]
公共类数据
{
[DataMember(Name=“data”)]
公共列表数据{get;set;}
}
[数据合同]
公务舱卡
{
[DataMember(Name=“CardName”)]
公共字符串CardName{get;set;}
[DataMember(Name=“functions”)]
公共列表函数{get;set;}
}
[数据合同]
公共类函数
{
[数据成员(Name=“State”)]
公共字符串状态{get;set;}
}
公共类JsonHelper
{
/// 
///JSON序列化
/// 
公共静态字符串JsonSerializer(T)
{
var ser=新数据契约JSONSerializer(类型(T));
var ms=新内存流();
ser.WriteObject(ms,t);
var jsonString=Encoding.UTF8.GetString(ms.ToArray());
Close女士();
返回jsonString;
}
/// 
///JSON反序列化
/// 
公共静态T JsonDeserialize(字符串jsonString)
{
var ser=新数据契约JSONSerializer(类型(T));
var ms=newmemoryStream(Encoding.UTF8.GetBytes(jsonString));
var obj=(T)ser.ReadObject(ms);
返回obj;
}
}
}
命名空间WebApplication2
{
公共部分类WebForm3:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
字符串s=@“{”“数据”“:[{”“id”“:17”“名称”“:”“红虫项目”“可以修改”“:真”“描述”“:”“,”“开始日期”“:”“1899-01-01T00:00:00Z”“到期日期”“:”“1899-01-01T00:00:00Z”“是否处于活动状态”“:真”“父”“:{”“id”“:0}},{”“id”“:14”“名称”“:”“红石”“,”“可以修改”“:真”“描述”“:”“开始日期”“,”“1899-01:00:00Z”“到期日期”“。”“:”1899-01-01T00:00:00Z“,”是有效的“:真的“,”父“:{”id“:0}”,“子“:[{”id“:16”,“名称“:”WEB“,”可以修改“:真的“,”描述“:”,”开始日期“:”1899-01-01T00:00:00Z“,”到期日期“:”1899-01-01T00:00:00Z“,”是有效的“:真的“,”父“:”id“:14}”;
ReadJSon项目;
}
受保护的字典ReadJSONProject(字符串jsObject)
{
var json=jsObject;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
动态jsonObject=serializer.Deserialize(json);
Dictionary dic=新字典();
var data=jsonObject[“数据”];
foreach(数据中的var记录)
{
var id=((int)记录[“id]”)。ToString();
变量名称=记录[“名称”]作为字符串;
dic.添加(id、姓名);
}
返回dic;
}
}
}

foreach循环中的成员“data”是一个数组。您需要迭代该数组的元素以访问“id”和“name”。

这是我的实现,不需要使用动态,顺便说一句,您可以轻松地将复杂的json转换为c类

public class Item
{
    public string id { get; set; }
    public string name { get; set; }
    public bool can_modify { get; set; }
    public string description { get; set; }
    public string start_date { get; set; }
    public string due_date { get; set; }
    public bool is_active { get; set; }
    public Item parent { get; set; }
    public List<Item> children { get; set; }
}

public class RootObject
{
    public List<Item> data { get; set; }
}

public Dictionary<string, string> ReadJSONProject(string jsObject)
{

    var json = jsObject;
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var jsonObject = serializer.Deserialize<RootObject>(json);
    Dictionary<string, string> dic = new Dictionary<string, string>();

    foreach (var item in jsonObject.data)
    {
        dic.Add(item.id, item.name);
    }

    return dic;
}
公共类项目
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共bool可以修改{get;set;}
公共字符串说明{get;set;}
公共字符串开始日期{get;set;}
公共字符串到期日{get;set;}
公共布尔是活动的{get;set;}
公共项父项{get;set;}
公共列表子项{get;set;}
}
公共类根对象
{
公共列表数据{get;set;}
}
公共字典ReadJSONProject(字符串jsObject)
{
var json=jsObject;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
var jsonObject=serializer.Deserialize(json);
Dictionary dic=新字典();
foreach(jsonObject.data中的var项)
{
dic.Add(项目id、项目名称);
}
返回dic;
}

调试代码后,jsonObject变成了一个
字典
。我认为你应该使用类,而不是使用
动态
。还要注意的是,你的
foreach
循环只循环一次……jsonObject中只有一个项目,那就是一个多数组的数组。无论如何,我得到的代码完全符合你的要求。S请看下面我的答案。
namespace WebApplication2
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string s = @"{""data"":[{""id"":17,""name"":""RedBug Project"",""can_modify"":true,""description"":"""",""start_date"":""1899-01-01T00:00:00Z"",""due_date"":""1899-01-01T00:00:00Z"",""is_active"":true,""parent"":{""id"":0}},{""id"":14,""name"":""RedRock"",""can_modify"":true,""description"":"""",""start_date"":""1899-01-01T00:00:00Z"",""due_date"":""1899-01-01T00:00:00Z"",""is_active"":true,""parent"":{""id"":0},""children"":[{""id"":16,""name"":""WEB"",""can_modify"":true,""description"":"""",""start_date"":""1899-01-01T00:00:00Z"",""due_date"":""1899-01-01T00:00:00Z"",""is_active"":true,""parent"":{""id"":14}}]}]}";
            ReadJSONProject(s);
        }

        protected Dictionary<string, string> ReadJSONProject(string jsObject)
        {

            var json = jsObject;
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            dynamic jsonObject = serializer.Deserialize<dynamic>(json);

            Dictionary<string, string> dic = new Dictionary<string, string>();

            var data = jsonObject["data"];

            foreach (var record in data)
            {
                var id = ((int)record["id"]).ToString();
                var name = record["name"] as string;

                dic.Add(id, name);

            }

            return dic;
        }
    }
}
public class Item
{
    public string id { get; set; }
    public string name { get; set; }
    public bool can_modify { get; set; }
    public string description { get; set; }
    public string start_date { get; set; }
    public string due_date { get; set; }
    public bool is_active { get; set; }
    public Item parent { get; set; }
    public List<Item> children { get; set; }
}

public class RootObject
{
    public List<Item> data { get; set; }
}

public Dictionary<string, string> ReadJSONProject(string jsObject)
{

    var json = jsObject;
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    var jsonObject = serializer.Deserialize<RootObject>(json);
    Dictionary<string, string> dic = new Dictionary<string, string>();

    foreach (var item in jsonObject.data)
    {
        dic.Add(item.id, item.name);
    }

    return dic;
}