我有一些序列化类的数组(命名为it元素)的类。我想序列化这个类,然后反序列化这个类。但反序列化是困难的。
因为在序列化之前,我不知道数组的类型,所以创建两个数组与元素数组匹配。在一个(typeOfElements
)中保持元素的类型,在另一个(serializedElemnt
)中保持元素的序列化字符串。但是,在反序列化之后,我不知道如何创建主元素数组。如何将类型转换为类来创建主数组?
[ProtoContract]
class MyClass
{
.
.
public MyClass()
{
}
object[] elements;
[ProtoMember(1)]
string[] SerilizedElements;
[ProtoMember(2)]
string[] TypeOfElements;
[ProtoBeforeSerialization]
void initBeforeSerilize()
{
TypeOfElements = new string[elements.Length];
SerilizedElements = new string[elements.Length];
for (int i = 0; i < elements.Length; i++)
{
TypeOfElements[i] = elements[i].GetType().ToString();
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, elements[i]);
SerilizedElements[i] = Encoding.UTF8.GetString(ms.ToArray());
}
}
}
[ProtoAfterDeserialization]
void initAfterSerilize()
{
for (int i = 0; i < SerilizedElements.Length; i++)
{
Type t = Type.GetType(TypeOfElements[i]);
using(MemoryStream ms=new MemoryStream(Encoding.ASCII.GetBytes(SerilizedElements[i])))
{
//I don't know how to write this line
elements[i]=Serializer.Deserialize<t>(ms);
}
}
}
}
发布于 2014-12-25 02:11:44
关于“我只知道运行时的类型”问题,请看Serializer.NonGeneric
,它有您希望使用Type
的所有方法。非泛型API也是v2 API (又名TypeModel
)上的主要API。字符串编码问题已经注意到了;如果您需要字符串,应该使用base-64,但就我个人而言,我会使用byte[]
。我还建议考虑是否可以使用继承而不是未知类型--如果候选类型的数量是有限的和已知的,这当然是可能的。
https://stackoverflow.com/questions/27645101
复制