Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
将json数组(不带键)映射到类对象C#_C#_Json_Mapping - Fatal编程技术网

将json数组(不带键)映射到类对象C#

将json数组(不带键)映射到类对象C#,c#,json,mapping,C#,Json,Mapping,我需要一些帮助来映射没有键的json数组。例如: [ "value1", 234, 3034, "data", [ "some value", null, 2020 ], ] 我根据收到的这些值创建了一个类,但无法映射到类对象。我可以使用动态变量访问这些数据,如: dynamic object = DataFromJson(); var firstvalues = objec

我需要一些帮助来映射没有键的json数组。例如:

[
    "value1",
    234,
    3034,
    "data",
 [
    "some value",
    null,
    2020
 ],
]
我根据收到的这些值创建了一个类,但无法映射到类对象。我可以使用动态变量访问这些数据,如:

dynamic object = DataFromJson();
var firstvalues = object[0]; // "value1"
我的json太大,里面有很多数组,所以使用索引进行访问是一个很大的过程


有人知道如何访问此类数据并映射到类吗?

我收到了很多关于这方面的反馈(谢谢!),以下是结论:

  • 作为JSON数组,这种信息不适合映射到类对象。这不是功能性建议

  • JArray可以在所有信息之间进行交互,然后将其带到一个类中。如果需要,您可以手动创建一个特定的方法,将每个值包含在类对象中

  • 另一种选择是使用动态对象,作为索引访问

  • 确保不能以另一种方式接收此信息,如带有键和值的JSON,并映射到类


如果有一些有用的更新,我将在这里进行编辑。

好的,有一个可用的选项,使用-一个开源库将这些数据加载到开箱即用的对象中

定义对象如下

[ChoSourceType(typeof(object[]))]
[ChoTypeConverter(typeof(ChoArrayToObjectConverter))]
public class foo
{
    [ChoArrayIndex(0)]
    public long prop1 { get; set; }
    [ChoArrayIndex(1)]
    public double prop2 { get; set; }
}
然后按如下方式解析JSON

string json = @"
[
    [
        1618170480000,
        ""59594.60000000"",
        ""59625.00000000"",
        ""59557.13000000""
    ],
    [
        1618170540000
    ]
]";

using (var r = ChoJSONReader<foo>.LoadText(json))
{
    foreach (var rec in r)
        Console.WriteLine(ChoUtility.Dump(rec));
}
stringjson=@”
[
[
1618170480000,
""59594.60000000"",
""59625.00000000"",
""59557.13000000""
],
[
1618170540000
]
]";
使用(var r=ChoJSONReader.LoadText(json))
{
foreach(r中的var rec)
Console.WriteLine(ChoUtility.Dump(rec));
}

@DmitriyGrebennikov这是完全有效的JSON。它是一个单独的JSON值(数组),包含其他JSON值(字符串/数字/空值/布尔值)的其他JSON值(数组)。如果它没有常量格式(元素1包含4项,元素2包含3项),则无法对其进行反序列化。您要么必须更改它以利用键,要么必须手动解析数据并构建自己的对象。您使用的序列化程序是什么?如果使用Json.NET,请参见。然后告诉我们如何识别进入类中的值,我们可以告诉您如何识别。您可以使用
JArray jsonArray=JArray.Parse(DataFromJson())。。使用
jsonArray.Children()
可以使用
LINQ
表达式获取任何属性的值。