【发布时间】:2021-03-16 08:42:57
【问题描述】:
我现在正在尝试使用新的 .net 5 System.Text.Json 来分析 json 文件。其中一个 JsonElement.GetRawText() 看起来像:
{"name":"filter","in":"query","required":false,"type":"string"}
如果我使用:(para 是 JsonElement)
var eo = para.EnumerateObject();
while (eo.MoveNext())
{
<div class="col col-4">
@eo.Current.Name = @eo.Current.Value
</div>
}
我可以看到类似“in = header”的内容。但如果我切换到:
var paraPosition = para.GetProperty("in");
我会得到:KeyNotFoundException:给定的键不在字典中。 我是不是搞错了什么?感谢您的帮助。
============================================ 更多信息:
其实就是swagger-doc生成的json。级别如下:
RootElement/get/paths/(many apis listed as properties rather than array)/get/parameters/[para]/in
我如何获得路径:
var jsonDocument = GetJsonDocument();
var elementOfPaths = jsonDocument.RootElement.GetProperty(ApiNode);
return elementOfPaths;
我如何获取 api 和“获取”:
var apiElement = Model.Value.EnumerateObject();
@while (apiElement.MoveNext())
{
var get = apiElement.Current.Value.EnumerateObject();
get.MoveNext();
到目前为止一切顺利,我可以使用 get.Current.Value.GetProperty("parameters")。
我如何获取参数和参数:
var parameters = get.Current.Value.GetProperty("parameters");
<div class ="row">
@foreach (var para in parameters.EnumerateArray())
{
<div>@para.GetRawText()</div>
var eo = para.EnumerateObject();
while (eo.MoveNext())
{
if (eo.Current.Name != "in")
{
continue;
}
var paraClass = eo.Current.Value.GetString() == "header" ? "text-secondary"
: eo.Current.Value.GetString() == "query" ? "text-info"
: "text-danger";
但是现在,我不能使用 para.GetProperty("in")。相反,我使用 EnumerateObject,这很丑。
好像是 JsonArray 的问题?
【问题讨论】:
-
可以发对应的json吗?
-
其中一个例子:{"name":"filter","in":"query","required":false,"type":"string"}
-
@Fildor 我刚刚编辑了主题。谢谢:)
-
你是怎么到
para的?如果我使用var doc=JsonDocument.Parse(json);var para=doc.RootElement; var paraPosition = para.GetProperty("in");,我无法重现该问题您发布的是具有单个对象的文档,因此只有根元素具有属性 -
我建议创建一个仅包含 JSON 字符串和尝试访问属性的代码的新控制台应用程序。我怀疑当前代码试图迭代错误的元素。
标签: c# system.text.json