需要您的帮助。
因此,我有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属性将被使用,序列化\反序列化将按照我想要的方式进行