Newtonsoft JSON模式比较包含对象类型

时间:2015-10-29 11:01:19

标签: c# .net json json.net jsonschema

我有一个类似下面描述的模型。

public class QueryValueDataModel
{
    public object Value { get; set; }
    public QueryValueType ValueType { get; set; }
}

我有一个QueryValueDataModel类型的JSON序列化:

{
   "Value": 100,
   "ValueType": 0
}

当我将JSON对象的架构与QueryValueDataModel架构

进行比较时
var obj = JToken.Load(reader); 

IList<ValidationError> errorMessages = new List<ValidationError>();
SchemaExtensions.IsValid(obj, schema, out errorMessages)

我收到错误且架构不匹配:

Invalid type. Expected Object, Null but got Integer

如何处理这种情况并使架构比较有效?或者,是否有一些解决方法呢?

1 个答案:

答案 0 :(得分:0)

您可以使用JSchemaGenerator从任何对象创建JSchema并将其与JObject.IsValid()方法进行比较

JSchemaGenerator generator = new JSchemaGenerator();
JSchema schema = generator.Generate(typeof(QueryValueDataModel));
JObject o = JObject.Parse(jsonstr);
if(o.IsValid(schema))
{
    QueryValueDataModel deserialized = o.ToObject(typeof(QueryValueDataModel));
}
else
{
    throw new Exception("schema dosn't match");
}

请注意! JSchemaGenerator已移至Newtonsoft.Json.Schema nuget包。

enter image description here