我有一个包含多个公共变量的类。我需要对这些变量的子集使用不同的序列化/反序列化方法(例如序列化变量 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];
}
}
答案 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)
{
…
}