我必须处理一个复杂的JSON文件,但是遇到了一些障碍。
在下面,您会从XML类别中找到一些摘录,但我将其转换为JSON,以便能够更轻松地对其进行处理。
<Selection Category="M43002NN">
<ReferendumOptionIdentifier>foo</ReferendumOptionIdentifier>
<ValidVotes>6162</ValidVotes>
<CountMetric Id="M" Type="LevelDepositList">43002</CountMetric>
<CountMetric Id="S4" Type="SeatsToBeFilled">23</CountMetric>
<CountMetric Id="S5" Type="SubstitutesMax">0</CountMetric>
<CountMetric Id="S9" Type="LinguisticRegime">2</CountMetric>
<CountMetric Id="S10" Type="VotesDeposited">6620</CountMetric>
<CountMetric Id="S11" Type="BlankAndInvalidVotes">458</CountMetric>
<CountMetric Id="S12" Type="Alderman">0</CountMetric>
<CountMetric Id="S14" Type="ValidVote_E5">0</CountMetric>
<CountMetric Id="S15" Type="BlankAndInvalidVotes_E5">0</CountMetric>
</Selection>
在上面的示例中,我试图提取类型为“ SeatsToBeFilled”的CountMetric的值。
到目前为止,我已经能够收集结果并隔离正确的CountMetric,但是我似乎无法获得它的价值。
这是我的课程:
public class TotalSelectionClass
{
[JsonProperty("@Category")]
public string Category { get; set; }
public int ValidVotes { get; set; }
public List<CountMetricClass> CountMetric { get; set; }
}
这是我使用的CountMetricClass:
public class CountMetricClass
{
[JsonProperty("@Id")]
public string Id { get; set; }
[JsonProperty("@Type")]
public string Type { get; set; }
}
下面是我用来获取所需CountMetric的代码(出于可读性目的而略微减少的代码):
var TotalSeats = Selection[0].CountMetric.Where(x => x.Type == "SeatsToBeFilled").First();
这将CountMetric对象返回给我,但是如何从中提取值?那么在这种情况下,如何从中提取数字23?
谢谢。
答案 0 :(得分:0)
这里的答案实际上取决于JSON的形状,因此取决于您的XML-> JSON转换方式。您尚未提供JSON表单,也未寻求转换XML-> JSON的帮助,因此我将根据可用信息进行回答。
照原样,您无法从CountMetricClass获取CountMetric值。这是因为XML中保存的值(SeatsToBeFilled的值为23)永远不会读入该对象。要获得价值,您需要
1)检查您的XML转换器是否确实将XML中的值编码为要解析的JSON
2)修改CountMetricClass,以使其从此值字段读取。为了便于阅读,我选择将此字段称为MetricValue
,但是显然您可以选择最适合您的名称。例如,您的新课程可能采用以下形式:
public class CountMetricClass
{
[JsonProperty("@Id")]
public string Id { get; set; }
[JsonProperty("@Type")]
public string Type { get; set; }
[JsonProperty("@MetricValue")]
public int MetricValue { get; set; }
}
3)一旦成功将MetricValue读入您的CountMetricClass中,我们就可以修改linq表达式以通过访问目标CountMetric的MetricValue字段来获取值,例如:
var TotalSeats = Selection[0].CountMetric.Where(x => x.Type == "SeatsToBeFilled").MetricValue;
答案 1 :(得分:0)
对可能遇到相同问题的人进行一些后续跟踪。
根据SIRHAMY的建议,我看了一下从XML转换的实际JSON。
{"@Id":"S4","@Type":"SeatsToBeFilled","#text":"23"}
按照SIRHAMY的建议,我在CountMetricClass中创建了一个文本字段
public class CountMetricClass
{
[JsonProperty("@Id")]
public string Id { get; set; }
[JsonProperty("@Type")]
public string Type { get; set; }
[JsonProperty("#Text")]
public string Text { get; set; }
}
在那之后,我可以使用以下方法获取文本的值:
Selection[0].CountMetric.Where(x => x.Type == "SeatsToBeFilled").First().Text
这将给我返回“ 23”。
谢谢西里米!