C# 使用包含空格的枚举将Json反序列化为NJsonSchema生成的对象

C# 使用包含空格的枚举将Json反序列化为NJsonSchema生成的对象,c#,json,serialization,enums,njsonschema,C#,Json,Serialization,Enums,Njsonschema,我需要你的帮助 所以,我有json模式,并使用该工具生成.cs模型。我能够使用它成功地将json反序列化到对象中,直到输入json包含带有空格的枚举值 这就是我要说的 在schema中,我有一个类似以下的属性: ... prop1: { enum: [ 'with space', 'withoutspace' ], }, ... 在生成的.cs模型中,我有一个对应的枚举: [System.CodeDom.Compiler.Generate

我需要你的帮助

所以,我有json模式,并使用该工具生成.cs模型。我能够使用它成功地将json反序列化到对象中,直到输入json包含带有空格的枚举值

这就是我要说的

在schema中,我有一个类似以下的属性:

...
prop1: {
                enum: [ 'with space', 'withoutspace' ],
            },
...
在生成的.cs模型中,我有一个对应的枚举:

[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "7.10.6235.25398")]
    public enum Some_prop1
    {
        [System.Runtime.Serialization.EnumMember(Value = "with space")]
        With_Space = 0,

        [System.Runtime.Serialization.EnumMember(Value = "withoutspace")]
        Withoutspace= 1,
    }
下面是两个输入示例: Json 1:

Json 2:

{
    ...
    "prop1": "withoutspace",
    ...
} 
然后在需要时反序列化它:

var someModel = Some.FromJson(json);
它的工作方式与Json 2相同,但无法识别带有空格的枚举值,错误如下:

将带空格的值“”转换为类型时出错 “com.company.model.Some_prop1”。路径“prop1”,第7行,位置24。“

所以这里是我的主要问题:有没有办法在不改变模式中枚举格式的情况下处理这种情况?

另外一个小问题:在调查过程中,我又遇到了一个问题——如果我像某些.ToJson()一样使用序列化,我的枚举将以类似“prop1”:0的方式生成,使用int<,因为json被用作用户友好的方式来更改内容,所以我需要以类似“prop1”:“带空间”的方式生成


你好,坎斯坦钦。

我意外地找到了自己的答案,希望它对其他人也有用

问题是enum的默认值是int,所以在反序列化时,它会尝试使用enum的int值或enum元素的确切名称。但您可以首先强制它将enum理解为字符串:

...
prop1: {
                type: "string",
                enum: [ 'with space', 'withoutspace' ],
            },
...

因此,在生成的类中,将使用StringEnumConverter属性,序列化\反序列化将按照我希望的方式进行。

您能否共享方法
Some.FromJson(json)的源代码?底层序列化程序应该是Json.NET,只要使用它,它就支持将枚举作为字符串进行[反]序列化。是的,你说得很对。问题是这个方法是生成的,我找不到合适的方法来访问这个转换器。我将回答这个问题,我自己意外地找到了它。只是附带说明:NJS还支持x-enumNames属性,以便您可以控制生成的枚举的名称和值
...
prop1: {
                type: "string",
                enum: [ 'with space', 'withoutspace' ],
            },
...