Json.Net:JSchema到Jtoken的转换问题

时间:2016-11-22 12:43:46

标签: c# json.net

以下是小片段:

foreach (KeyValuePair<string, JSchema> pair in dict)
{
    JToken token = pair.Value;
    string path = token.Path;
    ...       
}

JSchema类v2.0.0.0包含隐式运算符,它提供了类型的简单转换。

public static implicit operator JToken (
    JSchema s
)

JSchema对象可能包含以下内容:

{
  "title": "Массив предупреждений",
  "type": "array",
  "items": {
    "title": "Предупреждение",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "id": {
        "title": "Уникальный идентификатор предупреждения",
        "type": "string"
      },
      "element": {
        "title": "Идентификатор атрибута данных",
        "description": "Идентификатор атрибута данных в запросе, с которым связано предупреждение, может отсутствовать, если такая связь не установлена.",
        "type": "string"
      },
      "title": {
        "title": "Заголовок или название предупреждения",
        "type": "string"
      },
      "description": {
        "title": "Описание или полный текст предупреждения",
        "type": "string"
      }
    },
    "required": [
      "id",
      "title"
    ]
  }
}           

但令牌变量总是{}(空)。有什么问题?

1 个答案:

答案 0 :(得分:0)

我还认为JToken转换会将JSON架构视为JSON对象。由于每个JSON模式本身都是JSON,因此该用法对我们有意义。

但是,the implementation清楚地表明转换为JToken实际上会创建与当前架构关联的 new JSON对象。同样,JToken的转换访问了相关的架构。

就我个人而言,我觉得这种演员的使用​​令人困惑。

我们可以通过将模式重新解析为普通JSON来解决它:

var json = JObject.Parse(schema.ToString());