编写简洁的字符串存储模式

时间:2014-12-18 07:59:24

标签: c# serialization

我有一系列用于表示项目中应该具有特定字符串存储格式的标识符的类。我无法控制这种格式。

这些类是纯粹的容器,它们什么都不做。存储格式的格式为“CLASSSTYPE | key1 | key2 | key3 | ... | keyN”。每个“键”都可以映射到该类的一个属性。

现在,FromStorageString和ToStorageString函数如下所示:

public class SomeTypeId : IObjectId
{
    public static string ToStorageString(SomeTypeId id)
    {
        return string.Format("{0}|{1}|{2}", typeof(SomeTypeId).Name, MyIntKey, MyStringKey);
    }

    public static SomeTypeId FromStorageString(IdReader source)
    {
        int intKey = source.Retrieve<int>();
        string stringKey = source.Retrieve<string>();
        return new SomeTypeId(intKey, stringKey);
    }

    public int MyIntKey { get; private set; }

    public string MyStringKey { get; private set; }

    public SomeTypeId(int intKey, string stringKey)
    {
        MyIntKey = intKey;
        MyStringKey = stringKey;
    }
}

我们正在检查单元测试中的From / To一致性,但我觉得应该有一种方法来简化设置并在编译时执行检查。

我的想法是这样的:

[Storage("MyIntKey", "MyStringKey")]
public class SomeTypeId : IObjectId
{

    private SomeTypeId() {}

    public int MyIntKey { get; private set; }

    public string MyStringKey { get; private set; }

    public SomeTypeId(int intKey, string stringKey)
    {
        MyIntKey = intKey;
        MyStringKey = stringKey;
    }

}

但首先我不知道如何使用no参数构造函数和属性setter保持私有。我不愿公开他们。

其次,这种方法对属性名称更改和拼写错误不健全,因为属性中的属性名称是字符串。

我应该公开setter和私有构造函数吗?

有更好的方法吗?

0 个答案:

没有答案