解析 Json 部分工作 - 空子对象

Parse Json works partly - empty sub object

我想解析一个 json 文件。我对简化版本的第一次尝试只取得了部分成功。

简化的 json 结构如下所示

{
    "rowCount": 102,
    "data": [
        {"id": "56", "bezeichnung": "Main Center", "strasse": "foostreet"},
        {"id": "34", "bezeichnung": "Side Location", "strasse": "5th aveneue"}
    ]
}

对于外部 json { "rowCount":102, "data":[]} 我有一个 class jsonEnvelope 看起来像这样

public class JsonEnvelope
{
    public int RowCount { get; set; }
    public Location[] Data{ get; set; }
}

要解析数组数据中的 json "data":[] 我有 class location 看起来像这样

public class Location
{
  public string id;
  public string bezeichnung;
  public string strasse;
}

我解析 json 的代码如下所示

string jsonString = GetJsonFromFile();
var jsonEnvelope = new JsonEnvelope();

var options = new JsonSerializerOptions();
options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
jsonEnvelope = JsonSerializer.Deserialize<JsonEnvelope>(jsonString, options);
foreach (Location h in jsonEnvelope.Data)
{
    Console.WriteLine(String.Format("{0} in {1}", h.bezeichnung, h.strasse));
}
Console.WriteLine("row count = " + jsonEnvelope.RowCount);

什么在起作用?

jsonEnvelope.RowCount有效。数字 102 写入控制台

foreach 不工作 h.bezeichnungh.strasse 的值未写入控制台

问题

在写我的问题时我想通了 - 我会自己简短地回答它

问题是我在 class 位置而不是 属性 中使用了一个字段。 将 class 位置更改为此解决了问题

public class Location
{
    public string Id { get; set; }
    public string Bezeichnung { get; set; }
    public string Strasse { get; set; } 
}

请注意:

  • .NET 5 或
  • System.Text.Json 软件包版本 5 添加到您可以使用 IncludeFields 选项的 Core3.1 项目:
var serializeOptions = new JsonSerializerOptions
{
    IncludeFields = true,
};

var o = JsonSerializer.Deserialize<Location>(json, serializeOptions);