c# - 不寻常的 JSON 构造
问题描述
我应该阅读以下 JSON 响应:
ValueFilters:[
{field:"amount", comparitor:"GREATER", "value": 0},
{operator:"AND"},
{field:"id", comparitor:"LESS", "value": 5}]
如果它不包含 'operator' 对象,那么我不会有任何问题,但我如何构造等效的 C# 对象?
解决方案
首先,您的示例,JSON 不是有效的 JSON。为了使其有效,必须为每个属性名称添加引号,例如field
to "field"
。完成后,可以解析 Json:
{
"ValueFilters": [
{
"field": "amount",
"comparitor": "GREATER",
"value": 0
},
{
"operator": "AND"
},
{
"field": "id",
"comparitor": "LESS",
"value": 5
}
]
}
通过采用上面的有效 Json,它可以序列化为这些 C# 类:
public class Filters
{
public List<ValueFilter> ValueFilters { get; set; }
}
public class ValueFilter
{
[JsonPropertyName("operator")] // Handle the C# `operator` keyword.
public string Operator { get; set; }
public string field { get; set; }
public string comparitor { get; set; } // Misspell -> comparator
public int value { get; set; }
}
使用您最喜欢的解串器看起来像这样,.Net 5 System.Text.Json 显示:
var filter = JsonSerializer.Deserialize<Filters>(data);
当反序列化时,您有 3 个ValueFilter
项目。通过检查Operator
属性是否不为空,未来的代码知道如何处理数据。
操作员 | 场地 | 比较器 | 价值 |
---|---|---|---|
空值 | 数量 | 更大 | 0 |
和 | 空值 | 空值 | 0 |
空值 | ID | 较少的 | 5 |
推荐阅读
- go - 使用值接收器存储新值
- ruby-on-rails - 如何在wicked_pdf中使pdf连续
- python - 我在解释器中使用 python 3.8 时遇到此错误 >>> ImportError: Unable to find zbar shared library
- mysql - 插入查询执行时间过长
- php - 如何在tcpdf中的多页pdf中基于html设置自定义宽度和动态高度
- python - 如何从ftp读取图像文件并将其转换为opencv图像而不保存在python中
- python - 无法安装 python git hub 包
- python-3.x - 断言失败:[Condition x == y did not hold element-wise:]
- javascript - 是否有工具、程序、扩展来防止和查找项目中的代码重复?
- java - 与类中的私有构造函数声明相关的问题