Parse Json 部分工作 - 空子对象

Posted

技术标签:

【中文标题】Parse Json 部分工作 - 空子对象【英文标题】:Parse Json works partly - empty sub object 【发布时间】: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.bezeichnungh.strasse 的值未写入控制台

问题

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

【问题讨论】:

【参考方案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

以上是关于Parse Json 部分工作 - 空子对象的主要内容,如果未能解决你的问题,请参考以下文章

parse.com / iOS - 有没有办法以 json 格式下载整个类对象?

JSON.parse 返回对象对象

JSON对象的解析,JSON.stringify()/JSON.parse()的用法

JSON.parse()和JSON.stringify()方法学习

JSON.parse(JSON.stringify()) 实现对对象的深拷贝

JSON.parse(JSON.stringify()) 实现对对象的深拷贝