如何将序列化相关变量转换为整齐的单行?

时间:2015-11-18 14:18:38

标签: c# serialization

我有一个包含多个公共变量的类。我需要对这些变量的子集使用不同的序列化/反序列化方法(例如序列化变量 A B BSON ,然后再序列化变量 B C D E F XML < /强>)。

所有使用的序列化/反序列化方法以及应通过这些方法处理的变量都是已知的编译时间。因此,我应该能够将这些转换为整齐的单行,这应该告诉编码人员将哪些变量序列化/反序列化为组。

我知道Func and Action带有属性+ lambda表达式的get / set会使它更像

()=>SomeProperty, value => SomeProperty = value

但这不是很整洁,因为 SomeProperty 在一行中被写两次(我不需要 {get; set ;}

问题是我不知道如何在C#(.NET framework 2.0)中这样做。我想指定我可以传递给序列化和反序列化方法的字符串和变量对。

e.g。以下课程

public class SomeClass
{
    public int someNumber;
    public bool someBool;
    public string someString;
    public long someLong;
}

并且在第一种情况下我想序列化 someBool someLong ,所以我希望传递类似

的内容
var serializeThese = Dictionary<string, Variable>()
{
    { "boolish", this.someBool }, // this.someBool should be reference/pointer
    { "idNumber", this.someLong }, // this.someLong should be reference/pointer
};

序列化方法,如

public string SerializeTheseVariables(Dictionary<string, Variable> dict)
{
    string output = "";
    foreach(var pair in dict)
    {
        output += pair.Key + ":" + pair.Value + "-";
    }
    return output;
}

或者如果我想要反序列化,那么我会将serializeThese传递给像

这样的方法
public void ReinitFromBSON(BSON bson, Dictionary<string, Variable> dict)
{
    foreach(var pair in dict)
    {
        pair.Value = bson[pair.Key];
    }
}

1 个答案:

答案 0 :(得分:0)

从(de)序列化应该如何工作的定义中拆分要(de)序列化的实例。

这样的事情:

var serializeThese = Dictionary<string, Variable>()
{
    { "boolish", nameof(this.someBool) },
    { "idNumber", nameof(this.someLong) },
};

(但请注意,nameof是C#6的一项功能。或者,传递Expression并手动挖掘字段/属性的名称是一种选择。)

然后你的(de)序列化例程将使用这个定义+一个实际的实例,并通过反射访问字段/属性。

public string SerializeTheseVariables(Dictionary<string, Variable> serializationMetadata, object serializedInstance)
{
    …
}