序列化不接受不同的名称空间.为什么

本文关键字:空间 为什么 不接受 序列化 | 更新日期: 2023-09-27 18:07:00

我终于找到了问题,但是没有办法这是有意义的,这似乎是不可能的。这是可以解决的吗?我认为名称空间都是一样的,您可以通过输入名称空间来调用和访问来自不同名称空间的控件。类等,这主要是用于分类(对我来说)。

我的问题是序列化似乎不接受新的名称空间,除非引用与项目名称空间在相同的名称空间中,否则它生成的ResX代码是错误的。

原始错误:

错误1无效的Resx文件。无法加载类型命名空间2。FileFiltering, WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null,在. resx文件中使用。确保必要的引用已添加到项目中。第127行,位置5。c:'users'aderic'documents'visual studio 2010'Projects'WindowsFormsApplication1'WindowsFormsApplication1'Form1。resx 127 5 WindowsFormsApplication1

我想要一个可重用的控件,但我不想把它变成一个DLL。(我可以混淆它,但我宁愿不让人们导入和使用它)。我有2个类,它们会正常编译,但因为我选择了不同的命名空间,唯一的编译错误处理ResX找不到对象。这里有两个类:

using System;
using System.Windows.Forms;
using System.Runtime.Serialization;
namespace Namespace2
{
    class TestObject : Control
    {
        System.Collections.Generic.List<Namespace2.FileFiltering> InternalExtensions = new System.Collections.Generic.List<Namespace2.FileFiltering>();
        [System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)]
        public System.Collections.Generic.List<Namespace2.FileFiltering> ExtensionList
        {
            get
            {
                return InternalExtensions;
            }
            set
            {
                InternalExtensions = value;
            }
        }
        public TestObject()
        {
            BackColor = System.Drawing.Color.Gray;       
        }
    }
    [Serializable]
    public class FileFiltering : ISerializable
    {
        String InternalFileType = "New File Type";
        String[] InternalExtensions = new String[] { "*.*" };
        public String FileType
        {
            get
            {
                return InternalFileType;
            }
            set
            {
                InternalFileType = value;
            }
        }
        public String[] Extensions
        {
            get
            {
                return InternalExtensions;
            }
            set
            {
                InternalExtensions = value;
            }
        }
        public FileFiltering()
        {
        }
        public FileFiltering(SerializationInfo info, StreamingContext context)
        {
            FileType = info.GetString("FileType");
            Extensions = (String[])info.GetValue("FileExtensions", typeof(String[]));

            //Debugging.
            Console.WriteLine("FileType is " + FileType);
            Console.WriteLine("First extension is " + Extensions[0]);
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("FileType", FileType);
            info.AddValue("FileExtensions", Extensions);
        }
    }
}

有人知道解决这个问题的方法吗?还是我只是卡住了?我在这上面工作了几个小时,最后过了一段时间才把它序列化,属性工作和一切,至少有一些错误是我刚刚学习到它不适合与项目名称空间不同的名称空间。

序列化不接受不同的名称空间.为什么

这个问题与名称空间本身无关。简单地说,框架在试图反序列化控件时无法定位该类。

这可以通过指定一个自定义序列化器来克服,当框架试图反序列化该属性时使用——这可以通过DesignerSerializerAttribute来完成。

设计器序列化的文档:http://msdn.microsoft.com/en-us/library/ms171834.aspx

老实说,我会完全避免设计器序列化,除非您有特定的需要(特别是因为您提到您对其他开发人员重用您的控件不感兴趣)。