不寻常的 JSON 结构

Unusual JSON construct

我应该阅读以下 JSON 回复:

ValueFilters:[
{field:"amount", comparitor:"GREATER", "value": 0},
{operator:"AND"},
{field:"id", comparitor:"LESS", "value": 5}]

如果它不包含 'operator' 对象那么我不会有任何问题,但是我如何构造等效的 C# 对象?

首先,您的示例 JSON 无效 JSON。要使其有效,必须为每个 属性 名称添加引号,例如 field"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 属性 是否不为空,未来的代码知道如何处理数据。

Operator field comparitor value
null amount GREATER 0
AND null null 0
null id LESS 5