我在IIS上运行了一个silverlight应用程序,目前有一些数据列表硬编码到c#中,这不是我知道的好主意,但这是一个概念验证演示,现在我需要继续获取数据来自另一个可以修改的来源。
我查看了xml文件以及sql数据库。问题是客户端不愿意在机器上安装任何额外的东西(长安全过程),因此sql express可能不实用。我也尝试过调试sql compact edition,但我似乎无法找到任何体面的教程。
数据由三个相当短的包含字符串和整数的小对象列表组成。我正在寻找一个,最好是简单快速实施的解决方案,理想情况下不需要在服务器上进行任何额外的安装。
有没有人有任何可能方便的建议或链接?
提前致谢
第
答案 0 :(得分:1)
如果您习惯使用LINQ查询数据而不是SQL,Sterling DB听起来很适合您。它非常轻量级,并且在服务器或客户端上不需要额外的任何内容(除了明显包含在代码中)。它使用隔离存储来存储数据。所有序列化/反序列化都由库来处理。
编辑:
根据您的评论,数据是“静态的”(意味着所有客户端使用相同的数据),最好不要使用像Sterling这样的客户端数据库,甚至(如您所提到的)SQL CE。您对这种类型的“目录”数据进行硬编码有所保留是正确的,因为该数据的更改需要新版本的软件。
进行抽象的一种简单方法是简单地在包含所有数据的XAP旁边托管XML文件。您可以以任何方式编写XML。在软件中,每次应用程序运行时,下载XML文件,解析它并填充目录应该相当简单。当需要更改目录时,只需修改XML文件即可。
答案 1 :(得分:0)
我知道这不是一个理想的解决方案,但您可以尝试使用制表符分隔的文本文件。它们是最容易创建的。
答案 2 :(得分:0)
我使用XML(web.config)来存储所有客户端使用的数据,例如预配置或默认用户设置值,并使用Isolated Storage用于客户端独立数据,例如用户UI布局设置。
答案 3 :(得分:0)
我会将对象序列化为XML并将它们存储在服务器上,这样做相对容易
您可以将值拉入和XDocument
XDocument ConnectionStrings = XDocument.Load(System.AppDomain.CurrentDomain.BaseDirectory + "ConnectionStrings.xml");
以下是我正在使用的序列化功能
private static XDocument Serialize<T>(object obj)
{
XDocument ReturnValue = new XDocument();
//Create our Serializer with the type that was passed in
XmlSerializer Serializer = new XmlSerializer(typeof(T));
//Serialize our object to a string writer
System.IO.StringWriter sw = new System.IO.StringWriter();
Serializer.Serialize(sw, obj);
//We use a string reader to read the string from our Writer (created when serialized)
System.IO.StringReader sr;
sr = new System.IO.StringReader(sw.ToString());
//Then we can load the string reader giving us an XDocument
ReturnValue = XDocument.Load(sr);
return ReturnValue;
}
private static T Deserialize<T>(XDocument Xdoc)
{
T ReturnValue;
//Create our Serializer with the type that was passed in
XmlSerializer Serializer = new XmlSerializer(typeof(T));
//Create a string reader to access the XML data in our XDocument
System.IO.StringReader sr = new System.IO.StringReader(Xdoc.ToString());
//Deserialize the XML into our object
ReturnValue = (T)Serializer.Deserialize(sr);
return ReturnValue;
}