ben GetObjectData
işlevinde geliyor SerializationInfo
nesneyi kullanıyorum ve serisini zaman özel montaj ve tip-adını eşleştirmek için bir SerializationBinder
kullanın böylece geri, AssemblyName
ve FullTypeName
özelliklerini değiştirebilirsiniz öğrendim geçerli bir tür.
Serializable sınıf:
[Serializable]
class MyCustomClass : ISerializable
{
string _field;
void MyCustomClass(SerializationInfo info, StreamingContext context)
{
this._field = info.GetString("PropertyName");
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AssemblyName = "MyCustomAssemblyIdentifier";
info.FullTypeName = "MyCustomTypeIdentifier";
info.AddValue("PropertyName", this._field);
}
}
SerializationBinder:
public class MyBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
if (assemblyName == "MyCustomAssemblyIdentifier")
if (typeName == "MyCustomTypeIdentifier")
return typeof();
return null;
}
}
Serile kodu:
var fs = GetStream();
BinaryFormatter f = new BinaryFormatter();
f.Binder = new MyBinder();
var obj = (MyCustomClass)f.Deserialize(fs);
İşte semple olduğunu 0
Seri kaldırma kodu: Bana tarif edebilir
var fs = GetStream();
MyCustomClass obj = GetObjectToSerialize();
BinaryFormatter f = new BinaryFormatter();
f.Deserialize(fs, obj);
neden bunu yapmak ister ki? Sık sık yapmaya çalıştığım şey için bir işlev/yöntem yoksa, çok daha basit bir çözümü kaçırdığımı ya da sadece garip şeyler yapmaya çalışıyorum. – Lazarus
Sınıf adını bağımsız olarak serileştirme ve serpiştirme işlemini yapmak için bunu yapmak istiyorum, böylece sınıfı yeniden adlandırırsam veya sınıfın ad alanını değiştirirsem, serileştirme ve serpiştirme işlemi hiç değişmezdi. –
Ne tür bir Serileştirme gerçekleştiriyorsunuz? İkili? Xml? Diğer? –