在JSON数组中反序列化数组

时间:2020-01-03 12:07:48

标签: json json.net jsonconvert

我有以下要反序列化为对象的JSON文件

{
"InputFileFolder": "D:\\MontlyTransactions\\",
"TransactionGroups":
[
    {
        "Name": "Income", 
        "FilterString": "Type=@0 and Amount>@1 and (Description.Contains(@2) or Description.Contains(@3))",
        "Arguments": ["BAC",0,"REF1","REF2"]
    },
    {
        "Name": "Household Bills", 
        "FilterString": "Type=@0 and Amount<@1 and Amount.Contains(@2)",
        "Arguments": ["S/O",0,[16600,72000,15000]]
    }
]

}

我要转换为的对象如下:

    public class Configuration
{
    public string InputFileFolder { get; set; }
    public TransactionGroup[] TransactionGroups { get; set; }
}
   public class TransactionGroup
{
    public string Name { get; set; }
    public string FilterString { get; set; }
    public string[] Arguments { get; set; }
}

使用以下代码段:

this.Configuration = JsonConvert.DeserializeObject<Configuration>(configurationString);

但是第二个参数中的数组作为Newtonsoft.Json.Linq.Array而不是我期望的object []返回。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要首先检查Json中的Arguement元素。例如,根据OP中给出的Json

 'Arguments': ['S/O',0,[16600,72000,15000]]

public class TransactionGroup
{
    public string Name { get; set; }
    public string FilterString { get; set; }
    public object[] Arguments { get; set; } // Change here
}

您可以看到,涉及的元素不是字符串数组。实际上,它还包含字符串,数字和数字子数组。

因此您需要将类定义更改为

try {
    MongoCollection<Document> collection = vars.getObject("collection");
Document result = collection.find(eq("_id",'completeValue').first());
log.info (result)
if(result !=null){

vars.put ("Employeeoid", result.get("EmployeeOID").tointeger());
log.info (Employeeoid)
return "Employeeoid=" + Employeeoid;
}

这将帮助您成功反序列化Json。

答案 1 :(得分:0)

即使将数据类型更改为:@foreach(var course in Model) { <b> <b>Course ID : @course.CourseID</b> <b>Course ID : @course.Day</b> <b>Course ID : @course.Hour</b> </b> } ,它也会被序列化为public object[] Arguments { get; set; }。但是,您可以使用JArray的{​​{1}}方法检查类型并转换回object[]string[],如下所示:

ToObject

Fiddle

相关问题