2012-01-08 2 views
1

У меня есть JSONSchema, который будет иметь некоторые предметы. Теперь схемы, которые определяют эти элементы, должны быть указаны в основной схеме?

* one schema that you reference: 
{ 
    "id": "http://some.where/sub/schema#", 
    "type": "object", 
    "properties": { 
     "p1": { 
      "type": "integer", 
      "minimum": 12 
     } 
    }  
} 
--- * the main schema: ---- 
{ 
    "id": "http://path.to/base/schema#", 
    "type": "array", 
    "items": { 
     "extends": { 
      "$ref": "http://some.where/sub/schema#/properties/p1" 
     }, 
     "divisibleBy": 5 
    }  
} 

Также обратите внимание, что у меня будет несколько элементов в изделии. Я не вижу способа сделать это в api. Также api не позволяет добавлять пользовательские свойства. Как я могу достичь этого? Я использую JSON.net.

+0

Вы можете десериализовать эти два объекта в 'JObject' (используя' JsonConvert.DeserializeObject') и объединить их в некоторые кодировки. –

+0

Можете ли вы опубликовать простой пример? –

+0

Так как это немного, я отправил его в качестве ответа. –

ответ

3

Так как это будет слишком долго для комментария, я отправлю его в качестве ответа. Но вы должны работать над этим, чтобы настроить в соответствии с вашими потребностями.

string oneSchema = @"{ 
    ""id"": ""http://some.where/sub/schema#"", 
    ""type"": ""object"", 
    ""properties"": { 
     ""p1"": { 
      ""type"": ""integer"", 
      ""minimum"": 12 
     } 
    }  
} "; 

string main = @" 
{ 
    ""id"": ""http://path.to/base/schema#"", 
    ""type"": ""array"", 
    ""items"": { 
     ""extends"": { 
      ""$ref"": ""http://some.where/sub/schema#/properties/p1"" 
     }, 
     ""divisibleBy"": 5 
    }  
}"; 

var JObjMain = (JObject)JsonConvert.DeserializeObject(main); 
var jObjOther = (JObject)JsonConvert.DeserializeObject(oneSchema); 

JToken src = JObjMain["items"]["extends"]["$ref"]; 
JToken reference = jObjOther["id"]; 


var path = src.ToString().Replace(reference.ToString(), "").Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 
JToken j = jObjOther[path[0]]; 
for(int i=1;i<path.Length;i++) 
{ 
    j = j[path[i]]; 
} 

src.Replace(j); 

Console.WriteLine(JObjMain); 
Смежные вопросы