private static void WriteJson(string filepath,
string filename,
JsonSchema jsonschema)
{
using (TextWriter writer = File.CreateText(
@"C:UsersashutoshDesktopOutput" + filename + ".js"))
using (var jtw = new JsonTextWriter(writer))
{
jtw.Formatting = Formatting.Indented;
jsonschema.WriteTo(jtw);
}
//var json = JsonConvert.SerializeObject(
// jsonschema, Formatting.Indented,
// new JsonSerializerSettings {
// NullValueHandling = NullValueHandling.Ignore });
// File.WriteAllText(
// @"C:UsersashutoshDesktopOutput" + filename + ".js", json);
}
我正在创建一个JSONSchema从JSON.net,然后写出来。我得到一个
Invalid Operation Exception Sequence contains no matching element
但是当我使用注释代码而不是通常的东西。没有这样的例外。
1)是什么导致了这个异常?2)我会很高兴地使用第二种方法,但它感觉不直观,它会打印出模式的JsonType的整数值。类型而不是(数组,整数,bool等)
我能做些什么来摆脱这种情况?
当JsonSchema
的"Properties
"属性count = 0时,就会发生异常。Properties
为Dictionary<String,JsonSchema>
。我已经初始化了它,所以它不是空的。最终,代码可能会也可能不会向其中添加元素。因此,计数可以保持为0。
默认情况下,枚举将被序列化为相应的整数值。您可以通过在序列化器设置中提供StringEnumConverter
来轻松更改:
var json = JsonConvert.SerializeObject(jsonschema, Formatting.Indented,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
Converters = new List<JsonConverter> { new StringEnumConverter() }
});
编辑:
我运行这个简单的测试代码:var schema = new JsonSchemaGenerator().Generate(typeof(CustomType));
Debug.Assert(schema.Properties.Count == 0);
using (TextWriter textWriter = File.CreateText(@"schema.json"))
using (var jsonTextWriter = new JsonTextWriter(textWriter))
{
jsonTextWriter.Formatting = Formatting.Indented;
schema.WriteTo(jsonTextWriter);
}
// CustomType is a class without any fields/properties
public class CustomType { }
上面的代码将模式正确地序列化为:
{
"type": "object",
"properties": {}
}
生成的模式是否正确?序列化器似乎"认为"它应该处理一些实际上没有属性的属性。您可以显示生成模式的类型吗?类型可能有问题,导致生成无效的模式-但是,我仍然无法复制它。