- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常使用(反)序列化。我以前从未遇到过问题,但我认为这只是我看不到的人为错误......序列化工作完美,但反序列化不完美。
这是我的代码:
using System;
using System.IO;
using System.Windows.Forms;
using Utils;
using System.Xml;
using System.Xml.Serialization;
namespace Tests
{
public partial class MainForm : Form
{
private Test test;
public MainForm()
{
InitializeComponent();
}
private void SaveButton_Click(object sender, EventArgs e)
{
try
{
test = new Test();
test.MyInt = int.Parse(MyIntTextBox.Text);
test.MyStr = MyStrTextBox.Text;
test.Save();
MessageBox.Show("Serialized!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception caught", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadButton_Click(object sender, EventArgs e)
{
try
{
test = Test.Load();
MyIntTextBox.Text = test.MyInt.ToString();
MyStrTextBox.Text = test.MyStr;
MessageBox.Show("Deserialized!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Exception caught", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
[Serializable]
public class Test
{
public string MyStr { set; get; }
public int MyInt { set; get; }
public void Save()
{
using (StreamWriter sw = new StreamWriter("TestSerialized.xml"))
{
XmlSerializer xs = new XmlSerializer(typeof(Test));
xs.Serialize(sw, this);
sw.Flush();
}
}
static public Test Load()
{
Test obj = null;
using (StreamReader sr = new StreamReader("TestSerialized.xml"))
{
XmlSerializer xs = new XmlSerializer(typeof(Test));
if (!xs.CanDeserialize(XmlReader.Create(sr)))
throw new NotSupportedException(string.Format("The file <{0}> cannot be loaded.", "TestSerialized.xml"));
obj = (Test)xs.Deserialize(sr);
}
return (obj);
}
}
}
这是一个基本表单,有 2 个文本框,一个用于 Test 类的每个属性和 2 个按钮,一个用于保存,另一个用于加载。
别担心,我确保有一个文件要加载;)
我想制作一个通用的(反)serliazer 类,例如:
public class Serializer<T>
{
static public void Serialize(object obj, string path)
{
using (StreamWriter sw = new StreamWriter(path))
{
XmlSerializer xs = new XmlSerializer(typeof(T));
xs.Serialize(sw, obj);
sw.Flush();
}
}
static public T Dezerialize(string path)
{
T obj;
using (StreamReader sr = new StreamReader(path))
{
XmlSerializer xs = new XmlSerializer(typeof(T));
if (!xs.CanDeserialize(XmlReader.Create(sr)))
throw new NotSupportedException(string.Format("The file <{0}> cannot be loaded.", path));
obj = (T)xs.Deserialize(sr);
}
return (obj);
}
}
但我有同样的问题:反序列化不起作用...
编辑:我捕获了一个异常:“它在 XML 文档 (0, 0) 中存在错误”以及我要反序列化的 XML 文档(它由 XmlSerializer 生成)
<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyStr>toto</MyStr>
<MyInt>45</MyInt>
</Test>
感谢您的帮助!
最佳答案
去掉那两条线
if (!xs.CanDeserialize(XmlReader.Create(sr))
throw new NotSupportedException(string.Format("The file <{0}> cannot be loaded.", path));
或在检查是否可以反序列化后重置流
关于c# - 为什么反序列化不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067692/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!