【问题标题】:Parse Json works partly - empty sub objectParse Json 部分工作 - 空子对象
【发布时间】:2021-07-17 10:53:31
【问题描述】:

我想解析一个 json 文件。我第一次尝试简化版本只是部分成功。

简化的json结构是这样的

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

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

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

要解析数组数据"data":[] 中的json,我有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.bezeichnung 和 h.strasse 的值未写入控制台

问题

在写我的问题时,我想通了——我会自己简单回答一下

【问题讨论】:

    标签: c# arrays json .net-core deserialization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      请注意:

      • .NET 5 或
      • System.Text.Json 包版本 5 添加到 Core3.1 项目中,您可以使用 IncludeFields 选项:
      var serializeOptions = new JsonSerializerOptions
      {
          IncludeFields = true,
      };
      
      var o = JsonSerializer.Deserialize<Location>(json, serializeOptions);
      

      【讨论】:

      • 感谢您指出这一点。提示“仅将字段用于具有私有或受保护可访问性的变量。您的类向客户端代码公开的数据应通过方法、属性和索引器提供。” docs.microsoft.com
      猜你喜欢
      • 2012-08-17
      • 2018-03-24
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多