在JSON.NET中反序列化此对象

时间:2017-10-02 13:03:55

标签: c# .net json json.net

我有以下对象:

{
    "pickups": {
        "7": [
            5,
            8
        ],
        "10": [
            6,
            7,
            9
        ],
        "15": [
            1
        ],
        "20": [
            0,
            2
        ],
        "25": [
            3,
            4
        ]
    }
}

我想将每个拾取元素反序列化为以下对象:

public class Pickups {
    public Pickup[] pickups;
}

public class Pickup {
    public int Group; // This could be the 7, 10, 15, 20, 25, etc.
    public int[] Values; // If this was the "7" grouping, it would contain 5, 8.
}

从数据中可以看出,执行此操作有点棘手。我一直在尝试使用JsonConverter来转换对象的一些自定义代码,但这是一场噩梦,我无法做到正确。我想知道是否有人知道将这种类型的对象转换为我需要的正确格式的最佳方法?

3 个答案:

答案 0 :(得分:6)

虽然转换器是一个不错的选择,你仍然可以反序列化Json并构建所需的对象图

public class RootObject {
    public IDictionary<string, int[]> pickups { get; set; }
}

哪里

return mode === 'day' && $scope.myDisabledDates.some(x => x.slice(0, 10) === date);

答案 1 :(得分:0)

这是son2csharp.com所说的,因为你不能用起始编号来定义名称,所以它会出错。

public class Pickups
{
    public List<int> __invalid_name__7 { get; set; }
    public List<int> __invalid_name__10 { get; set; }
    public List<int> __invalid_name__15 { get; set; }
    public List<int> __invalid_name__20 { get; set; }
    public List<int> __invalid_name__25 { get; set; }
}

public class RootObject
{
    public Pickups pickups { get; set; }
}

但我认为

[DataMember(Name = "Name")]

应该工作,因为它不是JSON格式的错误。

答案 2 :(得分:0)

如果您使用JObject.Parse(...)是一个可行的选项,您可以使用以下代码(并使用异常处理和安全强制转换等更干净地编写它):

var jsonPickups = JObject.Parse(json);
var myPickups = new Pickups
{
    pickups = jsonPickups.First.First.Select(x =>
    {
        JProperty xProp = x as JProperty;
        return new Pickup
        {
            Group = int.Parse(xProp.Name),
            Values = (xProp.Value as JArray).Select(y => int.Parse(y.ToString())).ToArray()
        };
    }).ToArray()
};