として文字列をシリアライズ:JSON.NETシリアライザは、不適切な私は、クラスを持っているブール
[JsonObject(MemberSerialization.OptIn)]
public class UserPreferenceDTO
{
[JsonProperty]
public string Name { get; set; }
[JsonProperty]
public string Value { get; set; }
public static explicit operator UserPreferenceDTO(UserPreference pref)
{
if (pref == null) return null;
return new UserPreferenceDTO
{
Name = pref.Name,
Value = pref.Value
};
}
public static explicit operator UserPreference(UserPreferenceDTO pref)
{
if (pref == null) return null;
return new UserPreference
{
Name = pref.Name,
Value = pref.Value
};
}
}
とコントローラ、例えば、:
public HttpResponseMessage Post(int caseid, Guid id, UserPreferenceDTO prefs)
{ ... }
注:コントローラクラスが飾られています[CamelCaseControllerConfig]
属性 これを行う:
10は、クライアント上で私はこのようなオブジェクトの上送信しています:
{ name: "name", value: "Some value" }
しばしばvalue
は、JSのブール値です。問題は、コントローラに到達するとブール値がC#ブール値(True
/False
)に変換され、文字列化されることです。
'{ "name": "wantColFit", "value": "false" }'
を送信例えば
は、次のようになる。.NETコントローラ内
。
モデル(UserPreferenceDTO
)の定義Value
を見ると、となります。では、なぜシリアライザは値をブール値に変換していますか? (JSON.parse("true") === true
しかしJSON.parse("True") !== true
いるので、それが簡単にクライアント上のブールに戻って解析することになるだろうどの)保存されたとき、私はむしろ価値を持っているでしょう
が"true"
/"false"
として保存すること
これはちょっと混乱します。あなたは '{name:" name "、value:" value "}'のようなものを送ることについて話しますが、あなたは '{" wantColFit ":" false "}'を送ります。あなたは実際にそれを送信しますか?{"name": "wantColFit"、 "value":false} '?後者は、あなたが見ているものになるでしょう、私は期待しています。私は.NETが '{" wantColFit ":" false "}'をNameとValueプロパティを持つオブジェクトにどのように解析するのかよくわかりません... –
@MikeMcCaughanあなたは完全です。 Editted。 – seebiscuit