如果我有这个数据模型类:
public class Person
{
private int _id;
private int _deptID;
private string _firstName;
private string _lastName;
public int ID
{
get { return _deptID; }
set { _deptID = value; }
}
public int DeptID
{
get { return _id; }
set { _id = value; }
}
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
...然后创建我的数据集
private List<Person> GeneratePersonData()
{
List<Person> personData = new List<Person>();
personData.Add(new Person() { ID = 1, DeptID = 25, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 2, DeptID = 25, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 3, DeptID = 105, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 4, DeptID = 43, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 5, DeptID = 25, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 6, DeptID = 32, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 7, DeptID = 2, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 8, DeptID = 25, FirstName = "John", LastName = "Doe" });
personData.Add(new Person() { ID = 9, DeptID = 2, FirstName = "John", LastName = "Doe" });
return personData;
}
然后我将数据存储到xml中:
private void StorePersonData()
{
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.Indent = true;
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
using (XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))
{
serializer.Serialize(xmlWriter, GeneratePersonData());
}
}
}
}
现在,我想要做的是只读取xml中具有特定deptID的人到新列表中,所以我这样做:
private void ReadPersonData(int deptID)
{
List<Person>data = new List<Person>();
List<Person> newData = new List<Person>();
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("Person.xml", FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Person>));
data = (List<Person>)serializer.Deserialize(stream);
}
}
for (int i = 0; i < data.Count; i++)
{
if (data[i]._deptID == deptID)
{
newData.Add(data[i]);
}
}
}
}
但是如果我有一个非常大的数据集,这种方法会非常慢。在xml中是否有一种方法只能读取满足某种条件的数据?
答案 0 :(得分:0)
不 - 一旦你采用了在XML中保存数据并然后查询它的方法,那么对于大数据集来说它必须很慢。
这是静态数据还是会发生变化?如果是静态数据,为什么不将xml保留在内存中?
注1:为什么不在JSON对象中序列化,而不是XML。尺寸会小得多,因此你会看到一些改进。
注意2:当您与不同的应用程序(例如一个内置的.net和一个内置的java)交谈时,以JSON和XML保存数据是很好的。使用这些开放格式,您可以轻松传递数据。我看到的是,你存储数据和你读数据?为什么选择XML(或JSON)?
<强>更新强>
对于JSON序列化 - 您可以使用http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
如果此xml永远不会更改,则不要每次都读取它。读取并解析xml,将其保存在memomry中,各种方式(会话,静态变量,缓存)。
为什么不使用DB存储相同的信息?一个应用程序可以在DB中写入数据,其他应用程序可以从DB中检索数据吗?
答案 1 :(得分:0)
您可能需要重新考虑使用XML来存储数据。您的数据中没有太多结构,您正在进行随机访问。看起来数据库似乎可以更好地存储,索引和检索/过滤这些数据;然后,您可以根据需要将结果集导出到XML。