[英]Deserialize a json in C# with Json.Net (NewtonSoft)
我正在使用Newtonsoft.Json(v6.0.0.0),並且試圖將JSON反序列化為枚舉。
我嘗試使用屬性EnumMember
,該方法可用於序列化(從.Net Web API發送JSON),但似乎不適用於反序列化。
首先,我有一個像這樣的模型:
[JsonObject]
public class MyModel
{
/// <summary>
/// Gets or sets the username
/// </summary>
[Display(Name = @"UserName")]
[JsonProperty(PropertyName = "userName", Required = Required.Always)]
public string UserName { get; set; }
/* .
. REST OF THE MODEL
.
. */
/// <summary>
/// Gets or sets the enum model.
/// </summary>
[Display(Name = @"EnumModel")]
[JsonProperty(PropertyName = "enummodel", Required = Required.Always)]
public MyEnumModel EnumModel { get; set; }
}
MyEnumModel是具有這些值的枚舉:
[JsonConverter(typeof(StringEnumConverter))]
public enum MyEnumModel
{
[EnumMember(Value = "My Value 1")]
MyValueOne,
[EnumMember(Value = "My Value 2")]
MyValueTwo,
[EnumMember(Value = "My Value 3")]
MyValueThree
}
序列化此枚舉時,將獲得由屬性EnumMember
定義的正確值。 因此,在調用結果中,我有一個值為“我的值1”或“我的值2”或“我的值3”的JSON。
但是,當我以相同的值(例如,“我的值1”)發送回JSON時,會出現以下錯誤消息:
"The value 'My Value 1' is not valid for EnumModel."
它似乎不使用EnumMember
屬性進行反序列化,因為當我發送值“ MyValueOne”時,它可以工作。
我錯過了什么? 反序列化時[EnumMember()]
屬性如何真正起作用?
非常感謝您的幫助!
{
"userName":"testuser@gmail.com",
"enummodel":"My Value 1"
}
抱歉,但是我忘了提到一件重要的事情。 我在控制器中使用ModelState驗證:
if (!this.ModelState.IsValid)
{
return this.BadRequest(this.ModelState);
}
我認為json使用屬性EnumMember正確反序列化,但是驗證失敗,因為驗證程序未使用EnumMember驗證我的模型? 這是正確的嗎?
我的問題在於ModelState驗證,而不是反序列化。 使用EnumMember
屬性,一切正常。
顯然,在驗證時,ModelState驗證似乎沒有讀取EnumMember
屬性。 但這是另一個主題:)。
謝謝您的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.