希望这个问题不太明显,但是我正在迈出序列化的第一步,却找不到以下行为的解释:
我想序列化一个类以测试是否正确设置了所有内容。为此,我选择了the code from this tutorial并对其进行了如下修改:
private void SerializePresets(string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyClass));
using (TextWriter writer = new StreamWriter(path))
{
xmlSerializer.Serialize(writer, this);
}
}
此方法位于MyClass
中,也从那里调用。这给了我以下例外:
类型为“ System.InvalidOperationException”的异常发生在 System.Xml.dll,但未在用户代码中处理
其他信息:反映类型的错误 “ MyClass”。
由于MyClass
首先将其他类对象作为属性,所以我认为我也必须使这些序列化对象,但是异常仍然存在。
因此,我的猜测是,无法序列化this
,但是我找不到对此猜测的确认。
编辑:此属性根据内部异常导致问题:
[XmlArray("VolumePresetList"), XmlArrayItem(typeof(LinearAxisColorPresetsModel), ElementName = "VolumePresetList")]
public ObservableCollection<LinearAxisColorPresetsModel> VolumePresetList { get; set; }
答案 0 :(得分:1)
您可以使用它。它必须是不序列化的属性(如Dictionary)。请参阅下面的示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication103
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Serialize(FILENAME);
}
}
public class MyClass
{
public string test { get; set; }
public void Serialize(string filename)
{
SerializePresets(filename);
}
private void SerializePresets(string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyClass));
using (TextWriter writer = new StreamWriter(path))
{
xmlSerializer.Serialize(writer, this);
}
}
}
}
答案 1 :(得分:1)
借助内部异常(再次感谢提示),我可以找出序列化失败的原因。
类LinearAxisColorPresetsModel
没有没有参数的构造方法,这导致了此问题。
只需添加
/// <summary>
/// Default Constructor
/// </summary>
private LinearAxisColorPresetsModel()
{
}
这堂课为我解决了这个问题。剩下的就是找出原因,为什么我们必须有一个无参数的构造方法。