繁体   English   中英

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

[英]Deserialize JSON with null values in array

我有以下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>();

我想插入此内容作为注释,但是它太长了,因此我必须将其发布为答案。

请注意逗号,因为您的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"
        }
    ]
}

祝你今天愉快,

阿尔贝托

不确定您要实现什么,因为JToken.Parse()处理null值的方式与其他任何对象值的方式几乎相同,因此varCol将始终具有4个元素。

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

抱歉,我的问题有误导性。 我面临的问题是通过Entity Framework将Var集合中的空VarCol保存到数据库。 因为我有一个固定的大小列表,所以我需要这个才能知道集合中的哪个元素为空,我通过用一个空的VarCol实例化null VarCol来解决此问题,Alex Skalozub在他的评论之一中也指出了这一点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM