Json到NJsonSchema的反序列化生成了具有包含空格的枚举的对象



需要您的帮助。

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

以下是我所说的

在模式中,我有一个类似于的属性

...
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:

{
...
"prop1": "with space",
...
} 

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":"with space">

敬你,康斯坦丁。

我自己无意中找到了答案,希望它对其他人也有用。

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

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

所以在生成的类StringEnumConverter属性将被使用,序列化\反序列化将按照我想要的方式进行

相关内容

  • 没有找到相关文章

最新更新