首页 > 解决方案 > 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; }

标签: c#serializationxml-serialization

解决方案


你可以使用这个。它必须是不序列化的 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);
             }
        }
    }

}

推荐阅读