【发布时间】:2011-12-01 15:03:38
【问题描述】:
我正在做一些 C# IO 工作,我想从几个类中导入/导出数据。 看了一会,好像序列化和我想要的很接近。
但是,有一个问题。我有一个 XML 文件,它描述了某个类的成员(我将其称为 ValueWithId),这些成员聚集在一个类中,我将为此问题称为 CollectionOfValuesWithId。
ValueWithId 是一个包含一个名为ShortName 的string 成员的类,该成员是唯一的。每个ValueWithId 只有一个ShortName,所有ValueWithId 都有一个非空ShortName。 CollectionOfValuesWithId 包含一个函数,用于查找具有给定 ShortName 的 ValueWithId。
序列化时,我确实不想在输出文件中存储ValueWithId 或CollectionOfValuesWithId。相反,我只想将ShortName 存储在文件中。
到目前为止,一切都很好。我只需要使用SerializationInfo.AddValue("ValueWithId", MyValueWIthId.ShortName)。
问题来自反序列化。一些谷歌搜索表明,要从文件中读取数据,可以这样做:
public SomeClassThatUsesValueWithId(SerializationInfo info, StreamingContext ctxt)
{
string name = (string)info.GetValue("ValueWithId", typeof(string));
}
但是,字符串不足以恢复ValueWithId 实例。我还需要CollectionOfValuesWithId。我想要这样的东西:
public SomeClassThatUsesValueWithId(SerializationInfo info,
StreamingContext ctxt, CollectionOfValuesWithId extraParameter)
换句话说,我需要将额外的数据传递给反序列化构造函数。有谁知道这样做的任何方法或任何替代方法?
【问题讨论】:
-
你能展示你的班级和预期的 xml 吗?
-
@L.B 我将 XML 用于
ValueWithId,但序列化本身将来自/到二进制,而不是 XML。我真的不关心生成的文件,我只是不希望ValueWithIds 在那里结束。
标签: c# .net serialization deserialization