私はJson.netにカスタムコンバータを書く必要があると考え始めています。なぜならこれまでの正規コンバータはそれをカットしていないからです。 私が正しいJSONにシリアル化したクラスのゲームカスタムJson.netシリアライザ/デシリアライザを作成しますか?
class Game
{
[JsonProperty]
public int Edition { get; private set; }
[JsonProperty]
public string Name
{
get
{
return NameType.ToString();
}
private set
{
name = value;
}
}
[JsonProperty]
public string Date { get; private set; }
[JsonConverter(typeof(StringEnumConverter))]
public GameType NameType { get; private set; } //enum
public List<Question> Questions { get; private set; } //yes, Question is serializable
public Game(string Date, GameType t, int num, List<Question> q)
{
this.Date = Date;
this.NameType = t;
this.Edition = num;
this.Questions = q;
}
を持っていますが、正しくデシリアライズしません。 JSONは次のようになります。
{
"Edition": 1,
"Name": "Regular",
"Date": "2016",
"NameType": "Regular",
"Questions": [
{
"QuestionNumber": "1",
"Round": 1,
"Body": "1. A couple paragraphs",
"Answer": " answers"
},
]
}
しかし、デシリアライズするとき、それはのように出てくる:
日、 "2016"、 版 "1"、 名 "なし"、 NAMETYPE "なし"、私はこのようなデシリアライズで何か間違ったことを
ヌル 質問をしました:
Game g = JsonConvert.DeserializeObject<Game>(File.ReadAllText(path));
またはこれはカスタムシリアライザの作成を保証する状況ですか?
私はまだこのバグのようなものを扱っていると答えています.Json.netのドキュメントによれば、カスタムシリアライザを必要とする奇妙なケースのほとんどはIEnumerablesとDateTimes以外です。あなたには、いくつかの不変の性質、すなわちEdition
、Date
、NameType
を持つクラスを作成しようとしているかのように
は完全に論理的だ:すべてのあなたのセッターは、プライベート 'プライベート設定されているため、 'と名前はセッターを持っていないので、同じ方法でそれをデシリアライズしようとすると、jsonプロパティとして追加しません。 –
_「これまでの正規のコンバーターはそれをカットしていないので、私はJson.netでカスタムコンバータを書く必要があると思っています」_ [_自分自身を責める](http://wiki.c2.com/ ?BlameYourselfFirst)_ :) – MickyD
@MickyD、うん、それは私がしたことはかなりばかげていた。だから私は本当に1ヶ月前に書いたコードを振り返ってみるべきだった。今私は私の顔に大きな机のプリントを持っています – Alexandre