无效操作异常,序列中没有元素


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时,就会发生异常。PropertiesDictionary<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": {}
}

生成的模式是否正确?序列化器似乎"认为"它应该处理一些实际上没有属性的属性。您可以显示生成模式的类型吗?类型可能有问题,导致生成无效的模式-但是,我仍然无法复制它。

相关内容

  • 没有找到相关文章

最新更新