具有字符串属性的 JSON 对象通过 Web 方法传递给 C# 类,并具有相应的 Int 属性转换/设置错误
本文关键字:属性 错误 设置 转换 Int 对象 JSON 字符串 Web 方法 | 更新日期: 2023-09-27 17:55:34
我正在将一个JSON对象传递给一个 ASP.NET 的Web方法,其中Web方法将该类作为参数。该类具有 int 属性,问题是如果客户端不输入值,它将作为空字符串传递给服务器,并且 Web 服务器无法正确处理它。我尝试使用int.TryParse(value.ToString().Trim(), out temp);
但我仍然收到以下错误is not valid value for Int32.
。所以我的问题是,当将空字符串传递给 int 属性时,如何将它设置为默认值 0?我是否必须将属性更改为字符串?
客户端 JSON 对象
{ q: { "Quantity": "" } }
服务器端 Web 方法
[WebMethod]
public ResponseType MethodName(MyClass q)
{
return Something();
}
C# 类
public class MyClass
{
private int _Quantity = 0;
public int Quantity
{
get { return _Quantity; }
set
{
int temp = 0;
int.TryParse(value.ToString().Trim(), out temp);
_Quantity = temp;
}
}
}
与往常一样,任何帮助都值得赞赏!
更新
我更改了我的类,以便该属性是一个string
但是在get
字符串被解析为int,然后转换回string
。它有效,但这是最有效的方法吗?
C# 类
public class MyClass
{
private string _Quantity = string.Empty;
public string Quantity
{
get
{
int temp = 0;
int.TryParse(_Quantity, out temp);
return temp.ToString();
}
set
{
_Quantity = value.ToString().Trim();
}
}
}
您的模型似乎没有反映您显示的 JSON。您可以使用可为空的整数:
public class MyClass
{
public QuantityModel Q { get; set; }
}
public class QuantityModel
{
public int? Quantity { get; set; }
}
然后:
[WebMethod]
public ResponseType MethodName(MyClass q)
{
return Something();
}
这与你的 JSON 不完全匹配,因为其中 Quantity 是一个字符串,但如果你为它传递有效的整数,JavaScriptSerializer 将起作用。显然,如果您传递无效值,它将崩溃,就像{ q: { "Quantity": "foo_bar" } }
一样。