當web api需要一個int值時,如果客戶端在JSON中發送null或空字符串,它會自動轉換爲0.我該如何防止這種情況?有這樣的配置嗎?我希望它拋出一個錯誤,因爲它不是它所期望的。Newtonsoft Json.Net空或空字符串轉換
回答
您可以用JsonPropery
屬性註釋您的DTO /屬性並將其標記爲需要:
public class MyDto
{
[JsonProperty(Required = Required.Always)]
public int RequiredProperty { get;set; }
}
有了這個屬性,如果在JSON字符串指定爲屬性的值JsonConvert.DeserializeObject()
會拋出異常。
在這裏看到一個例子:https://dotnetfiddle.net/TstCau
你可以通過聲明爲「int?
在此之後,您可以檢查變量是否等於null並給出錯誤消息。
我不希望malform每個數據模型,並添加這樣的檢查。因爲我想要做的是防止錯誤地使用api,所以當發送意外空或「」時,它不會被視爲0.所以,簡而言之,我想要改變這種自動轉換行爲。 –
噢好吧我誤解了這個問題。我很抱歉,但我不知道這是否可能。 – Rick
該解決方案也相當一個黑客,不應該定期使用。但是,我們走了。
我有一個問題 - 我想接受我的API作爲字符串的枚舉,但希望他們在我的代碼中作爲枚舉,而不是字符串。
我只是把額外的屬性(可以把一些數據屬性那裏,就像[NotMapped]),並推翻getter和setter像下面
/// <summary>
/// Required. A type of the metric for which data is requested.
/// </summary>
public Metrics MetricType { get; set; }
[Required]
/// <summary>
/// Alias for MetricType.
/// </summary>
public string Type
{
get
{
return MetricType.ToString();
}
set
{
try
{
MetricType = value.ToEnum<Metrics>();
}
catch (System.Exception)
{
throw new ArgumentException("Invalid Type parameter.");
}
}
}
我認爲你可以重寫這樣的轉換邏輯。檢查你的字符串爲空或空,併爲你的int分配適當的值。
- 1. 如何將空字符串轉換爲空字符串json.net
- 2. newtonsoft json.net跳過字符串或整數
- 3. 使用Json.Net將空字符串轉換爲null
- 4. 轉換JSON空數組空字符串
- 5. Xpages空字符串或空字符串
- 6. 在對象中將空字符串轉換爲空字符串
- 7. 字符串爲空或空
- 8. 當使用newtonsoft json.net對一個字符串進行反序列化時,如何將一個空字符串轉換爲null爲空的int?
- 9. 字符串不爲空,空或空字符串
- 10. Json.NET在Unity拋「類型或命名空間`Newtonsoft`找不到」
- 11. 創建轉換字符串可空號
- 12. mssql_bind將空字符串轉換爲NULL
- 13. 轉換空值字符串 - C#.NET
- 14. 請求空值轉換爲字符串
- 15. 將`NULL`轉換爲字符串(空或者字面上`NULL`)
- 16. Json.Net如何將空序列化爲空字符串?
- 17. 如何將非空字符串數組轉換爲字符串?
- 18. MySQL:獲取空字符串或空字符串
- 19. 將字符串轉換爲字符,空格字符未正確轉換
- 20. 擊:更換空字符串
- 21. - [R空字符串替換
- 22. 在C中替換/更改空白或空字符串值#
- 23. PHP 7.0 pg_query_params():空被轉換爲空字符串,但與基準
- 24. 將空(ish)字符串轉換爲空的最有效方法
- 25. PetaPoco:將空值轉換爲空字符串
- 26. SQL將Access數據庫空值轉換爲空字符串
- 27. 轉換爲空字符串爲空Date對象與Spring
- 28. Newtonsoft Json.NET反序列化僅設置Json字符串中的值
- 29. 通過連接空字符串秩序的字符串轉換爲空字符串
- 30. 將字符數組轉換爲無空格的字符串
實際上,問題是客戶端濫用api,因此他們可能會發送null或「」爲所需的int(而不是int?)。這導致它被反序列化爲0,這是錯誤的。據我所知,你提出的解決方案並不妨礙這一點。總之,我想要的是防止這種自動轉換行爲。 –
@ JohnL.I在修改示例並傳遞''RequiredProperty':'''時仍然會出現異常。如果我理解正確,那就是你想要的。 (見https://dotnetfiddle.net/Fhy5Bf) – M4N
我的錯誤,我會接受你的回答,謝謝。 –