2016-11-22 30 views
1

這裏是小片段:Json.Net:JSchema到Jtoken轉換問題

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" 
    ] 
    } 
}   

但令牌變量始終是{}(空)。哪裏不對?

+0

你能解釋一下你正在嘗試做的,並提供進一步的背景是什麼? – peval27

+0

我需要從JSchema obj讀取Path屬性。但它在JSchema類中是內部的。所以我試圖使用公共P​​ath屬性來獲取JToken對象。 –

+0

你能告訴我們什麼Jschema對象包含? – jambonick

回答

0

我還認爲JToken轉換會將JSON模式視爲JSON對象。由於每個JSON模式本身都是JSON,所以這種用法對我們來說很有意義。

但是,the implementation清楚地表明,轉換爲JToken實際上會創建一個新的與當前模式關聯的JSON對象。同樣,從JToken轉換訪問相關模式。

就我個人而言,我覺得這種用法會讓人困惑。

我們可以解決它通過重新解析模式爲純JSON:

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