在使用JsonConvert.SerializeObject时忽略模型上的所有验证集



我有一个像下面这样的库中的模型,它不能改变。

public class Request
{
[JsonProperty("firstName", Required = Required.Always)]
public string FirstName { get; set; }
[JsonProperty("lastName", Required = Required.Always)]
public string LastName { get; set; }
}

现在,如果我用字段null初始化它并尝试序列化它,它会出错(示例如下)。

var request = new Request() { FirstName = "John" };
var obj = JsonConvert.SerializeObject(request);

Newtonsoft.Json。JsonSerializationException:不能为属性'lastName'写入空值。属性需要一个值。路径"。

我想序列化没有任何类型的验证。我的要求是得到如下输出:

{
"firstName": "John",
"lastName": null,
}

您可以迭代每个属性并使用自定义契约解析器重写该设置:

class IgnoreRequiredContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var props = base.CreateProperties(type, memberSerialization);
foreach (var prop in props)
{
prop.Required = Required.Default;
}
return props;
}
}

然后

var obj = JsonConvert.SerializeObject(request, new JsonSerializerSettings
{
ContractResolver = new IgnoreRequiredContractResolver()
});

,生成的json将是

{"firstName":"John","lastName":null}

相关内容

  • 没有找到相关文章

最新更新