首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用包含空格的枚举将Json反序列化为NJsonSchema生成的对象

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

Stack Overflow用户
提问于 2017-02-10 11:00:23
回答 1查看 1.3K关注 0票数 2

需要你的帮助。

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

这就是我要说的

在架构中,我有一个属性,类似于:

代码语言:javascript
复制
...
prop1: {
                enum: [ 'with space', 'withoutspace' ],
            },
...

在生成的.cs模型中,我有一个相应的枚举:

代码语言:javascript
复制
[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:

代码语言:javascript
复制
{
    ...
    "prop1": "with space",
    ...
} 

Json 2:

代码语言:javascript
复制
{
    ...
    "prop1": "withoutspace",
    ...
} 

当我需要它的时候,我就把它反序列化:

代码语言:javascript
复制
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“。

你好,坎斯坦丁。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 12:38:21

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

枚举的默认值是int,因此在反序列化时,它尝试具有enum的int值或enum元素的确切名称。但是,您可以强迫它首先将枚举理解为字符串:

代码语言:javascript
复制
...
prop1: {
                type: "string",
                enum: [ 'with space', 'withoutspace' ],
            },
...

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42157732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档