0

我目前正在实现将集合序列化到文件中。结果和我预期的一样

<Persons>
  <Person>
    <Identity>1234</Identity>
    <Name>asd</Name>
  </Person>
  <Person>
    <Identity>12345</Identity>
    <Name>asdd</Name>
  </Person>
</Persons>

现在,我不想反序列化整个集合,但我想用一些特定的选项从文件中反序列化一个对象。例如,

object GetPersonWithIdentity(int identity )
{
  // what to do here
}

object asd = GetPersonWithIdentity(1234); 
// expected Person with Identity "1234" and Name "asd"

反序列化整个集合并找到特定对象并将其返回是否合理,或者是否有其他解决方案?

4

2 回答 2

2

XML 不可搜索,因此您至少必须向前阅读,直到找到第一个匹配项。该框架不自动支持该功能,因此您必须使用XmlReader费力的手动操作。

如果文件很小和/或性能不是问题,只需反序列化所有内容并完成它。

如果您的数据集很大,我会考虑转向一些更具可扩展性的格式,例如嵌入式 SQL 数据库。SQL 数据库天生就有这种能力。

于 2013-02-12T23:08:36.113 回答
0

您将不得不序列化整个 XML 文件,因为正如 usr 所提到的,XML 只是转发的。XmlReader/Writer 本质上是一个 TextReader (Stream) 对象,并且正在执行文件 i/o 以读取 XML 文件。

我单独回答的原因是我会使用 XDocument 对象执行以下操作:

object GetPersonWithIdentity(int identity )
{
  return myXDocumentVaraible.Descendants("Person")
                     .First(person => person.Element("Identity").Value == identity.ToString());
}
于 2013-02-12T23:33:21.907 回答