JsonExtensionObject
The base JSON class with extension data.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
namespace NJsonSchema
{
[JsonConverter(typeof(ExtensionDataDeserializationConverter))]
public class JsonExtensionObject
{
[JsonExtensionData]
public IDictionary<string, object> ExtensionData { get; set; }
internal void DeserializeExtensionDataSchemas(JsonSerializer serializer)
{
if (ExtensionData != null) {
KeyValuePair<string, object>[] array = ExtensionData.ToArray();
for (int i = 0; i < array.Length; i++) {
KeyValuePair<string, object> keyValuePair = array[i];
ExtensionData[keyValuePair.Key] = TryDeserializeValueSchemas(keyValuePair.Value, serializer);
}
}
}
private object TryDeserializeValueSchemas(object value, JsonSerializer serializer)
{
JObject jObject = value as JObject;
if (jObject != null) {
if (jObject.Property("type") != null || jObject.Property("properties") != null)
try {
return jObject.ToObject<JsonSchema4>(serializer);
} catch {
}
Dictionary<string, object> dictionary = new Dictionary<string, object>();
{
foreach (JProperty item in jObject.Properties()) {
dictionary[item.Name] = TryDeserializeValueSchemas(item.Value, serializer);
}
return dictionary;
}
}
JArray jArray = value as JArray;
if (jArray != null)
return (from i in jArray
select TryDeserializeValueSchemas(i, serializer)).ToArray();
JValue jValue = value as JValue;
if (jValue != null)
return jValue.Value;
return value;
}
}
}