Newtonsoft Json.Net空或空字符串转换

时间:2017-02-19 18:55:57

标签: c# json asp.net-mvc asp.net-web-api json.net

当web api需要int值时,如果客户端在JSON中发送null或空字符串,它会自动转换为0.如何防止这种情况?有这样的配置吗?我希望它抛出错误,因为它不是它所期望的。

3 个答案:

答案 0 :(得分:4)

您可以使用JsonPropery属性为DTO /属性添加注释,并根据需要进行标记:

public class MyDto
{
    [JsonProperty(Required = Required.Always)]
    public int RequiredProperty { get;set; }
}

使用此属性,如果在JSON字符串中未指定该属性的值,JsonConvert.DeserializeObject()将抛出异常。

请点击此处查看示例:https://dotnetfiddle.net/TstCau

答案 1 :(得分:0)

你可以在一个整数内允许null,将它声明为" int?"

在此之后,您可以检查变量是否等于null并给出错误消息。

答案 2 :(得分:0)

这个解决方案也是一个黑客攻击,不应该定期使用。但是我们走了。

我遇到了一个问题 - 我想接受我的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.");
            }
        }
    }

我认为你可以覆盖那样的转换逻辑。检查字符串是否为null或为空分配正确的值。