C# 使用包含空格的枚举将Json反序列化为NJsonSchema生成的对象
我需要你的帮助 所以,我有json模式,并使用该工具生成.cs模型。我能够使用它成功地将json反序列化到对象中,直到输入json包含带有空格的枚举值 这就是我要说的 在schema中,我有一个类似以下的属性: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
...
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' ],
},
...