sto usando il ComponentSerializationService come si trova here:ComponentSerializationService non deserializzazione tutte le proprietà
Quando si taglia un controllo dal servizio di progettazione il metodo serialize viene chiamato, e quando si incolla deserializzare.
Nel mio esempio: ho un semplice pulsante e ho cambiato il colore dello sfondo.
Serialize si presenta così:
public object Serialize(ICollection objects)
{
var serializationService = _serviceProvider.GetService(typeof(ComponentSerializationService)) as ComponentSerializationService;
if (serializationService == null)
{
throw new Exception("ComponentSerializationService not found");
}
SerializationStore returnObject;
using (var serializationStore = serializationService.CreateStore())
{
foreach (object obj in objects)
{
if (obj is Control)
{
serializationService.Serialize(serializationStore, obj);
}
}
returnObject = serializationStore;
}
return returnObject;
}
E Deserialize assomiglia a questo:
public ICollection Deserialize(object serializationData)
{
var serializationStore = serializationData as SerializationStore;
if (serializationStore == null)
{
return new object[] {};
}
var componentSerializationService = _serviceProvider.GetService(typeof(ComponentSerializationService)) as ComponentSerializationService;
if (componentSerializationService == null)
{
throw new Exception("ComponentSerializationService not found");
}
var collection = componentSerializationService.Deserialize(serializationStore);
return collection;
}
Ho impostato i punti di interruzione in entrambi i metodi e l'oggetto in entrata contiene la proprietà di sfondo corretto, ma una volta deserializzati la proprietà non è persistente.
Tutte le idee sono benvenute. Questa è una classe difficile con molto poco nella riga di esempi di codice o documentazione.
Hai provato a utilizzare il metodo di sovraccarico come documentato in [MSDN] (https://msdn.microsoft.com/en-us/library/hyft4ewk (v = vs.110) .aspx) Sembra il motivo perché lo sfondo non è persistito in quanto non ci sono contenitori? – t0mm13b
Hai provato Newtonsoft.Json.JsonConvert? Questo serializza/deserializza qualsiasi tipo complesso. L'ho usato prima ed è fantastico. –
Sono sicuro che il tuo problema è: una volta lanciato il tuo SerializationStore su un oggetto .... non sai più cosa sia ... quindi nella tua Deserializzazione non dovresti essere in grado di restituirlo a SerializationStore, dovresti impostare un semplice test per dimostrarlo. Inoltre non stai mostrando cosa serializationService.Serialize (serializationStore, obj); fa ... personalmente penso che la tua complicità sia finita. perché non usare la normale serializzazione e deserializzazione .... tipo implementazione. Perché la necessità di quella personalizzata? modifica Vedo che ComponentSerializationService è una classe ms fornita – Seabizkit