English 中文(简体)
强有力的命名可能会在C#中引起物体序列化的问题?
原标题:
  • 时间:2009-05-19 09:21:39
  •  标签:

我将一些配置物体编成册,并将结果储存在数据库内。

new BinaryFormatter().Serialize(memoryStream, instance);
Convert.ToBase64String(memoryStream.ToArray());

这些对象将在稍后进行反序列化。

new BinaryFormatter().Deserialize(memoryStream);

It s possible, that the Application has some new assembly versions at the time of deserialization. In general it works well, but sometimes I get a file load exception: "The located assembly s manifest definition does not match the assembly reference.". The assemblies work all with strong naming, can that be the problem and how could I avoid this problem?

救助

最佳回答

简言之,使用<代码>BinaryFormatter和数据库(即长期)储存是一种坏账;BinaryFormatter <2<>s> /s> 三个大过失(违约):

  • it includes type metadata (shucks if you move/rename your types... this can mean strong name/versioning too)
  • it includes field names (fields are private details!)
  • it is .NET specific (which is a pain if you ever want to use anything else)

My blog post here 提出了两个具体问题,即混淆和自动执行的财产。 我在这里胜过案文,但你可能认为它令人感兴趣。

我建议使用基于的系列合同。 <代码>XmlSerializer或>DataContractSerializer通常就足够了。 如果你想要小的双手,那么protobuf-net可能令人感兴趣。 与<代码>BinaryFormatter不同的是,从中获取的双倍数可在执行之间(对于新领域)使用。 http://code.google.com/p/protobuf-net/wiki/Performance” rel=“nofollow noretinger”>quicker and small, also

问题回答




相关问题
热门标签