如何在json内容中标记某些属性

时间:2018-02-16 13:55:34

标签: c# .net json.net swagger swashbuckle

我正在编写一个应用程序,我需要事先在我的控制器类中处理一些场景,就像必须提供某些属性一样,否则状态代码将是BadRequest。这是我的班级相似。

public class MyClass
{
   [Required]
   public IEnumerable<NewObject> NewObjects { get; set; }
}

public class NewObject : INewObject
    {
        public NewObject(string typeName, IEnumerable<Property> properties)
        {
            TypeName = typeName;
            Properties = properties;
        }

        [JsonProperty(Required = Required.Always)]
        public string TypeName { get; }
        public IEnumerable<IProperty> Properties { get; }
    }

public interface IProperty
    {
        string Name { get; }
        object Value { get; }
    }

现在虽然我已将TypeName标记为必需属性,但如果我在从swagger发送请求时未在json内容中传递该内容,则json反序列化不会失败。我试图搜索,但我得到了一个答案,设置RequiredAlways应该有效。 以下是我通过招摇的Json内容:

{
  "NewObjects": [
    {
      "Properties": [
        {
          "Name": "string",
          "Value": ''
        }
      ]
    }
  ]
}

我通过查看其中一个解决方案,在下面写了一段代码:

var config = new HttpConfiguration();

            var jsonFormatter = config.Formatters.JsonFormatter;
            jsonFormatter.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;
            config.MapHttpAttributeRoutes();

仍然无法正常工作: 注意:我使用的是Newtonsoft.Json版本11.0.1

这似乎是一个招摇的问题,因为当我序列化输入C#对象并再次反序列化时,我得到了正确的错误。 例如,在我的控制器类中,如果我说:

var input2 = JsonConvert.DeserializeObject<MyClass>(JsonConvert.SerializeObject(input))

然后input2抛出异常。

1 个答案:

答案 0 :(得分:0)

您可以查看FluentValidation。如果我没有弄错的话,它的目的是专门用于验证jsons表单中的数据。

using FluentValidation;

public CertainActionValidator()
{
    RuleFor(x => x.PropertyName).NotEmpty()
}

您可以在其中添加大量其他条件。