需要你的帮助。
因此,我有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. line _pro1’.路径‘prop1 1’,第7行,位置24“。
因此,我的主要问题是:是否有办法在不改变模式中枚举格式的情况下处理这种情况?
另一个小问题:在调查时,我还面临一个问题--如果我要使用像some.ToJson()这样的序列化,我的枚举将以"prop1":0的方式生成,使用int<,而且由于json被用作用户友好的方式来更改事物,所以我需要它的方式类似于"prop1":"with space“。
你好,坎斯坦丁。
发布于 2017-02-13 12:38:21
我无意中自己找到了答案,希望这对其他人也有帮助。
枚举的默认值是int,因此在反序列化时,它尝试具有enum的int值或enum元素的确切名称。但是,您可以强迫它首先将枚举理解为字符串:
...
prop1: {
type: "string",
enum: [ 'with space', 'withoutspace' ],
},
...因此,在生成的类中,将使用StringEnumConverter属性,序列化\反序列化将按照我所希望的方式进行。
https://stackoverflow.com/questions/42157732
复制相似问题