自定义数据阵列的序列化

时间:2011-12-22 21:57:12

标签: c# serialization

我遇到了问题:

    protected Test(SerializationInfo info, StreamingContext context)
    {         
        sx = info.GetUInt16("sizex");
        sy = info.GetUInt16("sizey");
        sz = info.GetUInt16("sizez");
        ushort[] tab = new ushort[sx * sy * sz];
        tab = info.GetValue("data", System.UInt16[sx * sy * sz]);
        Console.WriteLine("Deserializing constructor");
    }
    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        Console.WriteLine("Serializing...");
        info.AddValue("sizex", sx);
        info.AddValue("sizey", sy);
        info.AddValue("sizez", sz);           
        info.AddValue("data", tab);
    }

我遇到编译时错误:'ushort'是'type',在给定的上下文中无效。 我应该改变什么?

2 个答案:

答案 0 :(得分:3)

info.GetValue需要一个类型,因此您不需要包含数组的大小,并使用typeof进行包装。此外,ushort[] tab = new ushort[sx * sy * sz];是不必要的。

ushort[] tab = (ushort[])info.GetValue("data", typeof(ushort[]));

答案 1 :(得分:2)

试试这个:

    protected Test(SerializationInfo info, StreamingContext context)
    {         
        sx = info.GetUInt16("sizex");
        sy = info.GetUInt16("sizey");
        sz = info.GetUInt16("sizez");
        ushort[] tab = new ushort[sx * sy * sz];
        tab = (ushort[])info.GetValue("data", tab.GetType());
        Console.WriteLine("Deserializing constructor");
    }