c# - Xml 序列化 - System.InvalidOperationException:不能序列化“this”吗?
问题描述
希望这个问题不是太明显,但是我正在迈出序列化主题的第一步,但找不到以下行为的解释:
我想序列化一个类以测试我是否正确设置了所有内容。为此,我从本教程中获取了代码并对其进行了如下调整:
private void SerializePresets(string path)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyClass));
using (TextWriter writer = new StreamWriter(path))
{
xmlSerializer.Serialize(writer, this);
}
}
此方法位于MyClass
其中,也从那里调用。这给了我以下例外:
System.Xml.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:反映类型“MyClass”时出现错误。
由于MyClass
首先将其他类对象作为属性,我想我也必须制作那些 serializabel,但是异常仍然存在。所以,我的猜测是,这是不可能的 serialize this
,但是我找不到这个猜测的确认。
编辑:此属性根据内部异常导致问题:
[XmlArray("VolumePresetList"), XmlArrayItem(typeof(LinearAxisColorPresetsModel), ElementName = "VolumePresetList")]
public ObservableCollection<LinearAxisColorPresetsModel> VolumePresetList { get; set; }
解决方案
你可以使用这个。它必须是不序列化的 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);
}
}
}
}
推荐阅读
- javascript - 反应原生 mapbox getCenter 不工作
- ruby-on-rails - 我可以在 Rails 系统测试中使用 RSpec 的#scenario 吗?
- mongodb - 为什么流星数据库(mongo db)的内容没有上传到 github 存储库中?
- c - 如果条件为假,则无操作的函数式宏
- ruby - Ruby 嵌套哈希合并
- angular - 如何将 viewRef 从一个 viewContainerRef 克隆到另一个 viewContainerRef?
- html - 基于锚文本的“a”元素的XPath?
- f# - 等效于 F# 中的 C# async main
- wpf - 从另一个窗口填充列表框,但在第二次尝试时,列表被替换而不是添加
- python - 缺少 1 个必需的位置参数:“响应”scrapy