0

私が実行しているテストでは、単純に .net オブジェクトを受け取り、それを json 文字列にシリアル化します。次に、その文字列を逆シリアル化して .net オブジェクトに戻そうとします。シリアル化されている文字列は問題ないように見えますが、何らかの理由で、int と DateTime の 2 つのプロパティで逆シリアル化が失敗しています。

使用されている .net プロパティは次のとおりです。

public string TokenString { get; set; }
public TokenUsage TokenUsage { get; set; }
public string TokenType { get; set; }
public string UserId { get; set; }
public DateTime Expires { get; private set; }
public int ExpiresIn { get; private set; }

そして、これはシリアル化されている json です。

{
    "TokenString":"encryptedtoken",
    "TokenUsage":300,
    "TokenType":"Bearer",
    "UserId":"myId",
    "Expires":"2013-07-05T11:28:18.4179133Z",
    "ExpiresIn":3600,
    "IsExpired":false
}

そして、これがその文字列の逆シリアル化に続くインスペクターです。

ここに画像の説明を入力

ご覧のとおり、ほとんどすべてが良好です。トークンの使用法 (列挙型) も正しく逆シリアル化されているようです。シリアライズ/デシリアライズの領域では何も凝っていません。ただJsonConvert.Serialize(myObject)JsonConvert.Deserialize<MyObject>(jsonString)

何か案は?

4

1 に答える 1

4

これら 2 つのフィールドにはプライベート セッターがあります。プライベート セッターを使用する場合は、この回答で説明されているように、これを許可するようにコントラクト リゾルバーを更新できます。

ここで説明されている他のテクニックがいくつかあります。

[JsonProperty]最も簡単なのは、次のようにプロパティをマークすることです。

[JsonProperty]
public DateTime Expires { get; private set; }

[JsonProperty]
public int ExpiresIn { get; private set; }
于 2013-07-02T23:53:14.293 に答える