Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在asp.net中编写和下载xml文件的最佳方式是什么?_Asp.net_Xml - Fatal编程技术网

什么';在asp.net中编写和下载xml文件的最佳方式是什么?

什么';在asp.net中编写和下载xml文件的最佳方式是什么?,asp.net,xml,Asp.net,Xml,我有一个web表单,它需要将用户输入的数据保存到一个文件中,并保存在客户端pc上,还可以读取保存的文件,并在以后重新填充字段。不会将任何文件保存到服务器端,因此我希望在编写时需要涉及流式处理 我认为XML是实现这一点的一种简单方法,但我在方法上遇到了障碍。XML文档?XML编写器?我被正确的搜索词难住了,甚至无法得到我想要的 提前感谢您的指点。听起来您需要将数据存储在cookie中。您无法从浏览器写入客户端pc上的文件。浏览器在沙箱中运行,可保护客户端pc免受恶意网站的攻击 查看有关在客户端计算

我有一个web表单,它需要将用户输入的数据保存到一个文件中,并保存在客户端pc上,还可以读取保存的文件,并在以后重新填充字段。不会将任何文件保存到服务器端,因此我希望在编写时需要涉及流式处理

我认为XML是实现这一点的一种简单方法,但我在方法上遇到了障碍。XML文档?XML编写器?我被正确的搜索词难住了,甚至无法得到我想要的


提前感谢您的指点。

听起来您需要将数据存储在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的数据。这可以增加,但会提示用户输入权限。