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

时间:2014-12-25 16:46:32

标签: c#

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

从我所处的位置,我看到两种可能的情况:

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

1 个答案:

答案 0 :(得分:3)

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

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("...");
    }
}