gpt4 book ai didi

c# - 如何将与序列化相关的变量变成简洁的单行代码?

转载 作者:行者123 更新时间:2023-11-30 18:22:38 24 4
gpt4 key购买 nike

我有一个包含多个公共(public)变量的类。而且我需要对这些变量的子集使用不同的序列化/反序列化方法(例如,将变量 AB 序列化为 BSON,然后再序列化变量BCDEFXML).

所有使用的序列化/反序列化方法以及应该通过这些方法处理的变量都是已知的编译时间。所以我应该能够将它们变成简洁的一行代码,告诉编码人员哪些变量将作为组进行序列化/反序列化。

我知道Func and Action使用 get/set for Property + lambda 表达式会使这更像

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

但这不是很整洁,因为 SomePropertyvalue 都在一行中写了两次(而且我不需要 {get;set ;}).

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

例如与以下类(class)

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

在第一种情况下,我想序列化someBoolsomeLong,所以我想传递类似

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];
}
}

最佳答案

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

像这样:

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

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

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

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

}

关于c# - 如何将与序列化相关的变量变成简洁的单行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33782433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com