【发布时间】:2015-11-18 14:18:37
【问题描述】:
我有一个包含多个公共变量的类。对于这些变量的子集,我需要不同的序列化/反序列化方法(例如,将变量 A 和 B 序列化为 BSON,然后再序列化变量B、C、D、E 和 F 到 XML)。
所有使用的序列化/反序列化方法以及应该通过这些方法处理哪些变量都是已知的编译时间。所以我应该能够将这些转换为简洁的单行代码,告诉编码人员哪些变量将作为组序列化/反序列化。
我知道 Func and Action 带有属性 + lambda 表达式的 get/set 会让这更像
()=>SomeProperty, value => SomeProperty = value
但这不是很整洁,因为 SomeProperty 和 value 都在单行中写了两次(而且我不需要 {get;set ;})。
问题是我不知道如何在 C#(.NET 框架 2.0)中做到这一点。我想指定可以传递给序列化和反序列化方法的字符串和变量对。
例如与以下课程
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];
}
}
【问题讨论】:
-
如果您需要使用多个序列化,那么现在是开始使用DTO 的好时机。不要对原始类做任何事情,但提供获取/设置 bsonDTO 和 xmlDTO 的方法。然后将它们用于序列化/反序列化。
标签: c# serialization