使用数组中的空值反序列化JSON

时间:2014-03-20 09:26:31

标签: c# javascript arrays json

我有以下JSON数组,它也可以为var数组中的某些元素保存空值。 var数组中的元素始终是固定的。

 "vars": [
        {
            "varCol": [
                {
                    "visible": false, 
                    "val": 1, 
                }, 
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                null
            ],
            "Type": "Type1"
            "UniqueId": "ID1"
        }, 
          {
            "varCol": [
                {
                    "visible": true, 
                    "val": 1, 
                }, 
                null,
                {
                    "visible": false, 
                    "val": 5, 
                }, 
                null
            ],
            "Type": "Type2", 
            "UniqueId": "ID2"
        } 
        ]

我有以下C#反序列化程序类:

public class Var
{
    public int VarId { get; set; }
    public string Type { get; set; }
    public List<VarCol> VarCols { get; set; }
}
public class VarCol
{
    public int VarColId { get; set; }
    public bool Visible { get; set; }
    public float Val { get; set; }
}

我想要的输出是在VarCol中有一个条目,它始终保存数组中固定的值结构。在这种情况下,每个vars元素的varCol数组中有4个条目。 对于我正在使用的JSON的反序列化:

Var v = JToken.Parse(json_string).ToObject<Var>();

3 个答案:

答案 0 :(得分:0)

我想将此作为评论插入,但它太长,所以我必须将其作为答案发布。

请注意逗号,因为您的JSON无效。我想你想要这样的东西:

    {
    "vars": [
        {
            "varCol": [
                {
                    "visible": false,
                    "val": 1
                },
                {
                    "visible": false,
                    "val": 5
                },
                {
                    "visible": false,
                    "val": 5
                },
                null
            ],
            "Type": "Type1",
            "UniqueId": "ID1"
        },
        {
            "varCol": [
                {
                    "visible": true,
                    "val": 1
                },
                null,
                {
                    "visible": false,
                    "val": 5
                },
                null
            ],
            "Type": "Type2",
            "UniqueId": "ID2"
        }
    ]
}

度过愉快的一天,

阿尔贝托

答案 1 :(得分:0)

不确定你想要实现什么,因为JToken.Parse()处理null值几乎与任何其他对象值一样,所以varCol总是有4个元素。

以下是一些测试代码:http://dotnetfiddle.net/9gGdH9

答案 2 :(得分:0)

对不起,我的问题很容易引起误解。 我面临的问题是通过Entity Framework将数据保存到Var集合中的null VarCol。我需要这个才能知道集合中的哪些元素是null,因为我有一个固定大小的列表。我通过使用空VarCol实例化null VarCol来解决这个问题,正如Alex Skalozub在他的一条评论中指出的那样: / p>

  

这取决于对象在数据库中的存储方式。如果是VarCol   与Var有多对一的关系,EF可能存储引用   VarCol表中的Var记录。但无法保存空记录   数据库。这就是为什么回读只会带来那些记录的原因   得救了您可能需要在解析后进行一些后处理   在保存到DB之前,JSON用空记录替换空值。 -   Alex Skalozub 5小时前