具有字符串属性的 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 对象通过 Web 方法传递给 C# 类,并具有相应的 Int 属性转换/设置错误

您的模型似乎没有反映您显示的 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" } }一样。