C# 使用选项反序列化

C# 使用选项反序列化,c#,deserialization,C#,Deserialization,我目前正在实现集合到文件的序列化。结果和我预期的一样 <Persons> <Person> <Identity>1234</Identity> <Name>asd</Name> </Person> <Person> <Identity>12345</Identity> <Name>asdd</Name> &

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

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

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

XML不可查找,因此您至少必须向前阅读,直到找到第一个匹配项。该框架不支持自动执行该操作,因此您必须使用
XmlReader
手动执行该操作,这很费劲

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


<>如果你的数据集很大,我会考虑移动到一些可扩展的格式,比如嵌入式SQL数据库。SQL数据库本身就具有这种功能。

您必须序列化整个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());
}

你到底为什么要这么做?你有没有衡量过反序列化整个集合的速度太慢?当然,对我来说,反序列化整个集合的速度会很慢。但我没有答案,而是反序列化。我认为实现XmlReader会更加困难,但会更加有效。谢谢你的回答。根据项目的性质,不应使用SQL数据库。如果我理解正确,您是在告诉我应该使用XmlReader而不是反序列化来读取文件?@MehmetAliSert请详细说明您的要求、数据以及您想要完成的任务。这似乎不是一个好主意,因为即使没有反序列化所有内容,您也只节省了平均花费时间的一半。没有多大帮助。@MehmetAliSert usr特别提到了嵌入式数据库,它不需要单独的SQL server。例如SQLite或SQL Server Compact。甚至那些对你来说都不可用?
object GetPersonWithIdentity(int identity )
{
  return myXDocumentVaraible.Descendants("Person")
                     .First(person => person.Element("Identity").Value == identity.ToString());
}