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.bezeichnung
和 h.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对象的解析,JSON.stringify()/JSON.parse()的用法
JSON.parse()和JSON.stringify()方法学习