具有默认构造函数的 .NET 中的必需属性

本文关键字:属性 NET 默认 构造函数 | 更新日期: 2023-09-27 18:35:21

我的一个类要求将默认构造函数用于序列化目的。但是,由于某些属性是必需的,因此解决此问题的最佳方法是什么,以便我可以要求设置属性。

从我站立的位置,我看到了两种可能的情况:

  • 我可以使用数据注释或类似的东西,以便在属性上放置一个 [必需] 属性,并在序列化之前检查每个 [必需] 属性是否有值,或者
  • 我可以将验证逻辑放在类中的其他位置,以确保正确设置属性。

具有默认构造函数的 .NET 中的必需属性

我会保持简单,不要弄乱属性。

public interface IDataValidator
{
    void ValidateData();
}
public string Serialize<T>(T obj):where T:IDataValidator
{
    obj.ValidateData();
    return Serialize(obj);
}
public T Deserialize<T>(string serializedObj):where T:IDataValidator
{
    T obj = Deserialize(serializedObj);
    obj.ValidateData();
}
public class Book : IDataValidator
{
    public string Isbn {get;set;}
    public Book(){}
    public Book(string isbn)
    {
        Isbn = isbn;
    }
    public void ValidateData()
    {
        if(string.IsNullOrEmptyOrWhiteSpace(Isbn)
            throw new ApplicationException("...");
    }
}