C# 原语的序列化

C# 原语的序列化,c#,serialization,C#,Serialization,我经常遇到这个问题,但还没有找到令人满意的解决办法 我正在为savegames实现一个阅读器(但它也可以应用于其他类型的文件)。根据版本的不同,会添加一些条目,但顺序始终保持不变。因此,我创建了一个类: public class Entry<T> { public T Value; public readonly FileVersion MinVersion; public Entry(T v = default(T), ScenarioVersion m =

我经常遇到这个问题,但还没有找到令人满意的解决办法

我正在为savegames实现一个阅读器(但它也可以应用于其他类型的文件)。根据版本的不同,会添加一些条目,但顺序始终保持不变。因此,我创建了一个类:

public class Entry<T> {
    public T Value;
    public readonly FileVersion MinVersion;
    public Entry(T v = default(T), ScenarioVersion m = FileVersion.V115) {
        Value = v;
        MinVersion = m;
    }
}
公共类条目{
公共价值观;
公共只读文件版本MinVersion;
公共条目(tV=default(T),scenariom=FileVersion.V115){
值=v;
MinVersion=m;
}
}
现在,你猜,我想用尽可能少的代码来写这些条目。如果(version>=MinVersion){/*写数据*/}只写一次,我想写一行
。条目可以是基元类型或对象,这就是问题所在

是否应该定义一个接口,并将其作为包装器为每个需要的基本类型实现?还是有更优雅的解决方案?

(查看评论以了解具体问题。)

某些值仅在满足特定条件时写入

在读取/写入文件时,这些条件是否已知,或者在读取时,这些条件是否基于文件中的其他数据?如果前者(已知),则传入一个必须求值为true才能执行读或写操作的。调用方可以提供适当的委托或lambda方法来做出决策。你在问题中提到了最低版本。我想这就是一个例子

如果是后者(根据文件中的其他数据读取/写入值),则这是一个更广泛的问题。如果可以在文件的前面或已知位置对数据做出决定,请加载它并将适当的参数传递到Func中。否则,您可能需要查看更复杂的解析机制,但我认为这并不是您要问的问题

它不是一个静态结构,包含一些类似struct{int len;char[len];}的内容

.Net提供了多种序列化对象的方法,但我怀疑您希望以定义的格式进行读/写,例如以长度后跟8位字符的形式存储字符串。如果.Net机制不能满足您的需要,您可能需要编写自己的机制。有关这方面的更多信息,包括使用获取基元的底层字节的信息,请参见


另外,更多信息仅供参考,如果您想避免写出基元类型,可以使用
公共类条目,其中T:class

请原谅我的无知,但到底是什么问题?基元类型可以在C#中序列化。如果你想更多的控制那里的序列化,看看。我看不出如何解决以下两个问题:1。某些值仅在满足特定条件时写入,2。它不是一个静态结构,并且包含一些东西,如
struct{int len;char[len];}
。仍然不清楚问题是什么。我会尝试回答,但也许问题中的一两个例子最好。