什么';在asp.net中编写和下载xml文件的最佳方式是什么?
我有一个web表单,它需要将用户输入的数据保存到一个文件中,并保存在客户端pc上,还可以读取保存的文件,并在以后重新填充字段。不会将任何文件保存到服务器端,因此我希望在编写时需要涉及流式处理 我认为XML是实现这一点的一种简单方法,但我在方法上遇到了障碍。XML文档?XML编写器?我被正确的搜索词难住了,甚至无法得到我想要的什么';在asp.net中编写和下载xml文件的最佳方式是什么?,asp.net,xml,Asp.net,Xml,我有一个web表单,它需要将用户输入的数据保存到一个文件中,并保存在客户端pc上,还可以读取保存的文件,并在以后重新填充字段。不会将任何文件保存到服务器端,因此我希望在编写时需要涉及流式处理 我认为XML是实现这一点的一种简单方法,但我在方法上遇到了障碍。XML文档?XML编写器?我被正确的搜索词难住了,甚至无法得到我想要的 提前感谢您的指点。听起来您需要将数据存储在cookie中。您无法从浏览器写入客户端pc上的文件。浏览器在沙箱中运行,可保护客户端pc免受恶意网站的攻击 查看有关在客户端计算
提前感谢您的指点。听起来您需要将数据存储在cookie中。您无法从浏览器写入客户端pc上的文件。浏览器在沙箱中运行,可保护客户端pc免受恶意网站的攻击 查看有关在客户端计算机上保存和检索cookie数据的页面:
您将希望使用XML序列化。请看这篇[MSDN文章][1]。以下是关于序列化和反序列化的摘录: 如何序列化对象 要序列化和对象,我们需要很少的 内置类的实例。所以 让我们首先创建一个 来自System.Xml的XmlDocument类 命名空间。然后创建一个 来自的XmlSerializer类 System.Xml.Xml序列化命名空间 使用参数作为对象类型。现在 只需创建 System.IO中的MemoryStream类 名称空间,这将帮助我们 保存序列化数据。所以你所有的 实例已经存在,现在您需要 调用他们的方法并获取您的 xml格式的序列化对象。我的 函数序列化对象外观 像下面这样
private string SerializeAnObject(object obj)
{
System.Xml.XmlDocument doc = new XmlDocument();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
System.IO.MemoryStream stream = new System.IO.MemoryStream();
try
{
serializer.Serialize(stream, obj);
stream.Position = 0;
doc.Load(stream);
return doc.InnerXml;
}
catch
{
throw;
}
finally
{
stream.Close();
stream.Dispose();
}
}
private object DeSerializeAnObject(string xmlOfAnObject)
{
MyClass myObject = new MyClass();
System.IO.StringReader read = new StringReader(xmlOfAnObject);
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(myObject.GetType());
System.Xml.XmlReader reader = new XmlTextReader(read);
try
{
myObject = (MyClass)serializer.Deserialize(reader);
return myObject;
}
catch
{
throw;
}
finally
{
reader.Close();
read.Close();
read.Dispose();
}
}
如何反序列化对象
要反序列化对象,需要
StringReader、XmlReader的实例
和XmlSerializer类,以便
读取xml数据(序列化数据),
将其读入XmlReader并反序列化
分别是。简单地说,我的
函数来反序列化对象
看起来像下面这样
private string SerializeAnObject(object obj)
{
System.Xml.XmlDocument doc = new XmlDocument();
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
System.IO.MemoryStream stream = new System.IO.MemoryStream();
try
{
serializer.Serialize(stream, obj);
stream.Position = 0;
doc.Load(stream);
return doc.InnerXml;
}
catch
{
throw;
}
finally
{
stream.Close();
stream.Dispose();
}
}
private object DeSerializeAnObject(string xmlOfAnObject)
{
MyClass myObject = new MyClass();
System.IO.StringReader read = new StringReader(xmlOfAnObject);
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(myObject.GetType());
System.Xml.XmlReader reader = new XmlTextReader(read);
try
{
myObject = (MyClass)serializer.Deserialize(reader);
return myObject;
}
catch
{
throw;
}
finally
{
reader.Close();
read.Close();
read.Dispose();
}
}
用于在客户端存储数据的其他一些选项: 查看哪些具有指向有关的信息的链接
- HTML5本地存储(需要新浏览器)
- 谷歌齿轮(必须安装)
- 雅虎的SWFStore(需要Flash,据说安装在超过98%的浏览器上)
- Cookies(用于少量数据)
一个大问题是,你的目标是支持多个客户端浏览器,还是仅仅支持IE?这将是决定使用何种方法的一个重要因素。除非您使用的是ActiveX对象。。。我想这就是斯诺和杰鲁梅尔在做的,对吧?但是它只在IE中起作用。@LarsH True,只有当你知道你的所有用户都只使用IE时,它才在intranet上真正有用。只是为了澄清我评论的上下文。。。我的意思是“你不能从浏览器写入客户端pc上的文件”,除非你使用ActiveX对象,我想这就是斯诺和。。。等等。是的,这就是我理解您的评论的方式。我猜,将xml作为下载发送到客户端,然后客户端需要上传它来进行更改。在我看来,将其存储在服务器端会更有意义。同意,但对于少量数据,cookie是理想的选择。这就是他们的目的。只要你不完全依赖它们,它们只是用来让用户更方便,这样他们就不必再次填写表单,Cookie的实现比服务器端存储机制快得多。你是对的,这取决于OP使用Cookie数据的方式可能是一个更好的选择。如果他需要长期存储,服务器端的XML将是理想的选择。但是对于小型的、短期的客户端存储,cookies是完美的。这是最有希望的,但我会简化事情。表单上的数据对于转换为独立类来说不够重要,该方法需要处理大约20种不同的表单,它们具有不同的复杂性,所有表单都具有不同的字段。背景:这是旧JetForms客户端/服务器功能的升级/替换。我们正在使用dynamicpdf生成PDF,但由于时间限制,我们还没有可填充的PDF。存储xml服务器端会使这变得更容易。对于搜索词,请尝试谷歌的“c#编写cookie数据”我很好奇,为什么您认为XML是一种很好的方法呢?再加上Silverlight,您可以在客户端的独立存储中存储1MB的数据。这可以增加,但会提示用户输入权限。