我试图序列化/反序列化包含使用protobuf网V2哈希表的属性我的自定义类。
[ProtoContract]
public class MyClass
{
[ProtoMember(1)]
public Hashtable MyHashTable { get; set; }
}
当我打电话Serializer.Serialize出现(...)异常: 无类型定义的串行:System.Collections.Hashtable
我试着修改:
[ProtoContract]
public class MyClass
{
[ProtoMember(1, DynamicType = true)]
public Hashtable MyHashTable { get; set; }
}
但我有另一个异常: 类型未预期,且没有合同可以推断:System.Collections.DictionaryEntry
也许有人知道一种方法,我怎么能序列化哈希表?
感谢所有谁帮助了我。 这里是我的解决方案。 我知道这是不是最好的办法,但也许有人可以接受。
[ProtoContract]
public class HashtableTestClass
{
private string inputParametersBase64 = string.Empty;
private Hashtable myHashTable;
public Hashtable MyHashtable
{
get { return myHashTable; }
set { myHashTable = value; }
}
[ProtoMember(1)]
public string InputParametersBase64
{
get
{
if (myHashTable == null)
return string.Empty;
return HashtableToBase64(myHashTable);
}
set
{
inputParametersBase64 = value;
if (!string.IsNullOrEmpty(inputParametersBase64))
{
try
{
myHashTable = Base64ToHashtable(inputParametersBase64);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}
public static Hashtable Base64ToHashtable(string s)
{
MemoryStream stream = new MemoryStream(Convert.FromBase64String(s), false);
IFormatter formatter = new BinaryFormatter();
return (Hashtable)formatter.Deserialize(stream);
}
public static string HashtableToBase64(Hashtable hashtable)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, hashtable);
stream.Close();
return Convert.ToBase64String(stream.ToArray());
}
}