我有一些带有一些序列化类的数组(命名为它的元素)。我想序列化这个类,然后反序列化它。但反序列化很困难。
因为在序列化之前我不知道我的数组的元素类型,所以创建两个数组匹配元素数组。在一个(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);
}
}
}
}
答案 0 :(得分:0)
对于&#34;我只知道运行时的类型&#34;问题,请查看Serializer.NonGeneric
,其中包含您使用Type
所需的所有方法。非通用API也是v2 API上的主要API,即TypeModel
。已经注意到字符串编码问题;如果你需要字符串,应该使用base-64,但我个人使用byte[]
。我还建议考虑是否可以使用继承而不是未知类型 - 如果候选类型的数量是有限且已知的话,这肯定是可能的。