假设我有以下课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NetworkSwitcher
{
[Serializable]
class testClass
{
public string str;
public testClass(string _str)
{
this.str = _str;
}
}
}
现在,当我尝试执行以下操作时,它会抛出System.Windows.Markup.XamlParseException。
testClass tc = new testClass("Hello World");
XmlSerializer xsl = new XmlSerializer(typeof(testClass));
TextWriter WriteFileStream = new StreamWriter(@"C:\NSProfiles.xml");
xsl.Serialize(WriteFileStream, tc);
WriteFileStream.Close();
如果我使用简单的String类型对象而不是tectClass,代码可以正常工作:
string data = "hello world";
XmlSerializer xsl = new XmlSerializer(typeof(String));
TextWriter WriteFileStream = new StreamWriter(@"C:\NSProfiles.xml");
xsl.Serialize(WriteFileStream, data);
WriteFileStream.Close();
所以我猜问题是在类定义中,我该如何解决?我使用的是WPF,而不是WinForms,我没有任何WPF或XMLSerialization的经验。如果我提供任何其他有用的信息,请告诉我。
答案 0 :(得分:1)
要修复错误,请在类中添加默认构造函数(不带参数的构造函数)。
单独执行此操作将停止发生错误,但可能无法正确序列化字符串值。我不是百分之百确定,因为它可以能够序列化一个公共成员变量。
如果没有,您将需要为字符串值添加公共属性。
此类的更“标准”实现可能如下所示。您可以使用第二个构造函数,也可以使用setter来设置值:
[Serializable]
public class testClass
{
private string str;
public testClass()
{
}
public string Str
{
get { return str; }
set { str = value; }
}
}
修改:在课程中添加了公共修饰符。现在应该工作。
另外,我猜你正在调用在Window的构造函数中抛出异常的代码?这是我可以看到这会引发XAML异常的唯一原因。构造函数中的错误包含在该XAML异常中,因此在这些情况下,您需要查看InnerException以查找问题。
答案 1 :(得分:0)
这些解决了这个问题。
将公共类修饰符添加到类中。
using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;
namespace NetworkSwitcher
{
[Serializable()]
public class testClass
{
private string str;
public string _str
{
get { return str; }
set { str = value; }
}
public testClass()
{
//Default
}
}
}
答案 2 :(得分:-2)
开始阅读有关Xml序列化的文档。
你错过了:
Nlot确定你的XAML异常来自哪里,但这个没有意义。