在c#中访问非序列化类中包含的序列化对象

时间:2013-10-21 06:51:40

标签: c# serialization

我有一个像这样的程序代码

namespace Ask{
    public class TestSerialize
    { 
        [Serializable]
        public struct position
        {
            public int x;
            public int y;
        }
    };


    public class SubTest:Panel
    {
        public TestSerialize.position pos;
    }

    public class Test
    {
        public static void main(String args[])
        {
            SubTest t=new SubTest();
            Console.WriteLine(t.pos.x);
        }
    }
}

现在在课堂测试中访问pos.x会显示警告

警告在'Ask.SubTest.pos'上访问成员可能会导致运行时异常,因为它是按引用编组的类的字段

我对序列化概念很弱 请建议如何缓解此警告?有解决方法还是我需要重新设计? 我不想在这里发现异常。无论如何要避免它?

2 个答案:

答案 0 :(得分:0)

您必须将struct的x和y更改为public。

[Serializable]
public struct position
{
    public int x;
    public int y;
}

答案 1 :(得分:0)

我认为struct成员的问题会使它们公开。请参阅我的以下程序完整的代码副本。只有struct成员是公共的,并且编译正常而没有任何警告。

public class Program
{
    public static void Main(string[] args)
    {
        SubTest t = new SubTest();
        Console.WriteLine(t.pos.x);
    }
}

public class TestSerialize
{
    [Serializable]
    public struct position
    {
        public int x;
        public int y;
    }
};


public class SubTest
{
    public TestSerialize.position pos;
}