2017-02-10 1 views
2

あなたの助けが必要です。NJsonSchemaへのJsonの逆シリアル化は、空白を含む列挙型のオブジェクトを生成しました

私はjsonスキーマを持っていて、私はNJsonSchema.CodeGenerationツールを使用して.csモデルを生成しました。私は入力jsonがスペースを含むenum値を含むまで、jsonをオブジェクトに逆シリアル化するためにそれを使用することができました。

[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, 
    } 

そして、ここで:私は、対応する列挙型を持っている.csファイル生成されたモデルで

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

:ここ

は、私のような性質を持っている私は、スキーマは約

を話しているものです2つの入力例です: Json 1:

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

JSON 2:

{ 
    ... 
    "prop1": "withoutspace", 
    ... 
} 

と私はそれを必要とするとき、私はちょうどそれをデシリアライズ:

var someModel = Some.FromJson(json); 

それはそれはJSON 2のためにすべきであるように動作しますが、それはして列挙型の値を認識できません 『com.company.model.Some_prop1』と入力する

スペース\と「変換エラー値\」」:このようなエラーが発生した空間。パス「PROP1」、7行目、位置24」だからここ

は私のメインの質問です:?はスキーマに列挙型のフォーマットを変更することなく、このような状況に対処する方法がある

小追加の質問:私はいくつかのようなシリアル化を使用する場合、私はもう1つの問題に直面している - 私は、"prop1"のような方法で生成されます:0、int <とjsonはユーザ友好的な方法を変更するには、私は"prop1"のような方法でそれが必要です: "スペース"

よろしく、Kanstantsin。

+0

メソッドSome.FromJson(json);のソースを共有できますか?基になるシリアライザはJson.NETでなければなりません。これは['StringEnumConverter'](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Converters_StringEnumConverter.htm)が使用されている限り、enumを文字列として直列化することをサポートしています。 – dbc

+0

はい、そうです。ことは、メソッドが生成され、私はこのコンバータに到達する適切な方法を見つけることができませんでした。私は答えの解決に過ぎません。私は間違ってそれを見つけました。 – kikaxa

答えて

2

私は間違いなく自分自身で答えを見つけ、他の人にも役立つことを願っています。

enumのデフォルト値はintなので、デシリアライズしている間はint値のenumまたはenum要素の正確な名前を取得しようとします。しかし、あなたが最初にすべての文字列として列挙型を理解するためにそれを強制することができます

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

をので、生成されたクラスでStringEnumConverter属性が使用され、直列化\デシリアライゼーションは、私はそれを望んでいた道を行くだろう。

+0

ちょうどsidenote:NJSは生成されたenumの名前と値を制御できるようにx-enumNamesプロパティもサポートしています –

関連する問題