我正在寻找一种非侵入式的方式来强制反序列化在以下情况下失败:
- 该类型未在强命名程序集中定义。
- 使用 BinaryFormatter。
- 自序列化以来,类型已被修改(例如,已添加属性)。
下面是一个失败的 NUnit 测试形式的问题的说明/重现。我正在寻找一种通用的方法来使这个通过而不修改Data
类,最好只设置BinaryFormatter
在序列化和/或反序列化期间。我也不想涉及序列化代理,因为这可能需要每个受影响类型的特定知识。
在 MSDN 文档中找不到任何对我有帮助的东西。
[Serializable]
public class Data
{
public string S { get; set; }
}
public class DataSerializationTests
{
/// <summary>
/// This string contains a Base64 encoded serialized instance of the
/// original version of the Data class with no members:
/// [Serializable]
/// public class Data
/// { }
/// </summary>
private const string Base64EncodedEmptyDataVersion =
"AAEAAAD/////AQAAAAAAAAAMAgAAAEtTc2MuU3Rvcm0uRGF0YS5UZXN0cywgV"+
"mVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2"+
"VuPW51bGwFAQAAABlTc2MuU3Rvcm0uRGF0YS5UZXN0cy5EYXRhAAAAAAIAAAAL";
[Test]
public void Deserialize_FromOriginalEmptyVersionFails()
{
var binaryFormatter = new BinaryFormatter();
var memoryStream = new MemoryStream(Convert.FromBase64String(Base64EncodedEmptyDataVersion));
memoryStream.Seek(0L, SeekOrigin.Begin);
Assert.That(
() => binaryFormatter.Deserialize(memoryStream),
Throws.Exception
);
}
}