用数组中的空值反序列化JSON
本文关键字:反序列化 JSON 空值 数组 | 更新日期: 2023-09-27 17:51:01
我有以下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个元素。
对不起,我的问题误导了你。我面临的问题是通过实体框架在Var集合中保存一个空VarCol到DB。因为我有一个固定大小的列表,所以我需要这样才能知道集合中哪些元素是空的。我通过用空VarCol实例化空VarCol来解决这个问题,正如Alex Skalozub在他的一个评论中指出的那样:
这取决于对象在数据库中的存储方式。如果VarCol与Var有多对一关系,EF可能会存储引用到VarCol表中的Var记录。但是空记录不能保存到数据库。这就是为什么回读只会带来那些记录得救了。您可能需要在解析后进行一些后处理在保存到DB之前,用空记录替换空值。–Alex Skalozub 5 hours ago