Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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#_Arrays_Json_Dynamic - Fatal编程技术网

C# 从动态JSON数组中提取数据

C# 从动态JSON数组中提取数据,c#,arrays,json,dynamic,C#,Arrays,Json,Dynamic,我正在将动态JSON对象转换为C#中的Excel。我已经尝试了以下步骤。 从数据库中,我得到以下作为字符串的响应 [{“ResourceName”:“啊”,“Projectd”:1,“WeekNo”:2,“2019年12月2日”:7.00,“2019年12月3日”:7.50,“2019年12月5日”:7.50,“2019年12月6日”:7.00},{“ResourceName”:“CK”,“Projectd”:1,“WeekNo”:2,“2019年12月2日”:6.00,“2019年12月3日”

我正在将动态JSON对象转换为C#中的Excel。我已经尝试了以下步骤。 从数据库中,我得到以下作为字符串的响应

[{“ResourceName”:“啊”,“Projectd”:1,“WeekNo”:2,“2019年12月2日”:7.00,“2019年12月3日”:7.50,“2019年12月5日”:7.50,“2019年12月6日”:7.00},{“ResourceName”:“CK”,“Projectd”:1,“WeekNo”:2,“2019年12月2日”:6.00,“2019年12月3日”:5.00,“2019年12月5日”:2.00,“2019年12月6日”:5.00},{“ResourceName”:“啊”,“Projectd”:1,“WeekNo”:3,“2019年12月9日”:6.00,“2019年12月10日”:7.50,“2019年12月11日”:7.00,“2019年12月12日”:7.50,“2019年12月13日”:8.00},{“资源名称”:“CK”,“projectd”:1,“WeekNo”:3,“2019年12月9日”:6.00,“2019年12月10日”:4.00,“2019年12月11日”:null,“2019年12月12日”:5.00,{“资源名称”:“SL”,“projectd”:1,“WeekNo”:3,“2019年12月9日”:null,“2019年12月10日”:1.50,“null”2019年12月12日:1.50,“2019年12月13日”:0.50},{“ResourceName”:“啊”,“Projectd”:1,“WeekNo”:4,“2019年12月16日”:7.00},{“ResourceName”:“CK”,“Projectd”:1,“WeekNo”:4,“2019年12月16日”:3.00}]

我需要将上面的字符串转换为JSON并执行循环操作,以便为Excel创建设置标题和详细值。我使用了下面的方法创建了一个
动态
对象

ResourceName和动态日期应作为列标题。由于
date
值是动态的,因此无法创建模型

using System.Web.Helpers;
dynamic jsonObject = Json.Decode(response);
我能够从QuickWatch中提取值,但是,输出仅在运行时生成,如下所示

(new System.Collections.Generic.Mscorlib_DictionaryDebugView<string, object>(((System.Web.Helpers.DynamicJsonObject)((System.Web.Helpers.DynamicJsonArray)jsonObject)._arrayValues[0])._values).Items[0]).Key
(新System.Collections.Generic.Mscorlib_字典BugView(((System.Web.Helpers.DynamicJsonObject)((System.Web.Helpers.DynamicJsonArray)jsonObject)。_数组值[0])。_值)。项[0])。键
是否有方法循环遍历动态数组内容


只需获取字符串并使用JavaScriptSerializer将其反序列化为本机对象。例如,使用以下json:

现在,您可以通过执行以下操作将JSON字符串反序列化为动态字符串数组:

JavaScriptSerializer js = new JavaScriptSerializer();
var resourceData =  js.Deserialize<Dynamic[]>(json);
JavaScriptSerializer js=新的JavaScriptSerializer();
var resourceData=js.Deserialize(json);

我建议将JSON反序列化为字典集合,而不是使用
动态
,此方法提供类型安全性和迭代。以下示例使用Newtonsoft.JSON NuGet包:

sample.json:

[
  {
    "ResourceName": "AH",
    "ProjectID": 1,
    "WeekNo": 2,
    "02 Dec 2019": 7.00,
    "03 Dec 2019": 7.50,
    "04 Dec 2019": 7.00,
    "05 Dec 2019": 7.50,
    "06 Dec 2019": 7.00
  },
  {
    "ResourceName": "CK",
    "ProjectID": 1,
    "WeekNo": 2,
    "02 Dec 2019": 6.00,
    "03 Dec 2019": 5.00,
    "04 Dec 2019": 3.00,
    "05 Dec 2019": 2.00,
    "06 Dec 2019": 5.00
  },
  {
    "ResourceName": "AH",
    "ProjectID": 1,
    "WeekNo": 3,
    "09 Dec 2019": 6.00,
    "10 Dec 2019": 7.50,
    "11 Dec 2019": 7.00,
    "12 Dec 2019": 7.50,
    "13 Dec 2019": 8.00
  },
  {
    "ResourceName": "CK",
    "ProjectID": 1,
    "WeekNo": 3,
    "09 Dec 2019": 6.00,
    "10 Dec 2019": 4.00,
    "11 Dec 2019": null,
    "12 Dec 2019": 5.00,
    "13 Dec 2019": 4.00
  },
  {
    "ResourceName": "SL",
    "ProjectID": 1,
    "WeekNo": 3,
    "09 Dec 2019": null,
    "10 Dec 2019": 1.50,
    "11 Dec 2019": null,
    "12 Dec 2019": 1.50,
    "13 Dec 2019": 0.50
  },
  {
    "ResourceName": "AH",
    "ProjectID": 1,
    "WeekNo": 4,
    "16 Dec 2019": 7.00
  },
  {
    "ResourceName": "CK",
    "ProjectID": 1,
    "WeekNo": 4,
    "16 Dec 2019": 3.00
  }
]
代码:

static void Main(字符串[]args)
{
字符串json=File.ReadAllTextAsync(“sample.json”).Result;
var deserializedJson=JsonConvert.DeserializeObject(json);
foreach(反序列化djson中的var字典)
{
Console.WriteLine(“--Record--”);
foreach(字典中的var keyValuePair)
{
WriteLine($“{keyValuePair.Key}:{keyValuePair.Value}”);
}
Console.WriteLine();
}
}
输出:


您应该使用JSON.NET并向其传递一个字典示例@styx JSON字段是动态的。因此无法创建模型。谢谢Bhumik。
dynamic
的定义是什么?dynamic关键字是C#4.0中的新关键字,用于告诉编译器变量的类型可以更改,或者直到运行时才知道。请将其视为能够与对象交互而不必强制转换它。
static void Main(string[] args)
{
    string json = File.ReadAllTextAsync("sample.json").Result;
    var deserializedJson = JsonConvert.DeserializeObject<IEnumerable<IDictionary<string, string>>>(json);

    foreach(var dictionary in deserializedJson)
    {
        Console.WriteLine(" -- Record --");

        foreach(var keyValuePair in dictionary)
        {
            Console.WriteLine($"{keyValuePair.Key}:{keyValuePair.Value}");
        }

        Console.WriteLine();
    }
}