Ho un curioso caso di questo problema di serializzazione - che è stato chiesto più volte su questo sito e ho passato alcune di queste domande e ho provato gli elementi usuali senza successo:tipo xxxx non previsto uso xmlinclude o soapinclude
- Aggiungere [XmlInclude] alla classe gettando l'errore
- Rimuovere gli spazi dei nomi
- Aggiungi un namespace diverso per ogni classe
per spiegare ulteriormente, ho fornito una versione semplificata ver di seguito il mio codice. Essenzialmente sto usando un oggetto WebServiceHost
per eseguire un servizio RESTful e uno dei miei endpoint restituisce un oggetto serializzato come XML (ho annotato l'oggetto con gli attributi [DataContract]
e [DataMember]
). Questo oggetto contiene SerializableDictionary<string, object>
(here) dove il valore è stato digitato come object
. Credo che questo sia il motivo per cui sta venendo a mancare:
- funziona bene quando viene assegnato il valore di un primitivo
- quando assegno un oggetto personalizzato per la coppia KV V, ottengo il tipo inaspettato eccezione probabilmente perché il Serializzatore non sa come serilaize l'oggetto/un qualche tipo di problema namespacing
Ovviamente, sono in grado di annotare Object.cs con [XmlInclude]
sia perché è un servizio e io non sono me stesso serializzazione non posso usare qualcosa di simile
new Serializer(typeof(...), new Type[] { ... }}
Qualche idea di cosa posso fare? Ho pensato di non digitare il valore di dict come oggetto e renderlo più concreto, ma il problema è che questo valore può assumere caratteri primitivi o cusotm. Del codice per spiegare quanto sopra:
Edit: Aggiornato il codice qui sotto per renderlo più chiaro
[DataContract]
public class ResponseObject
{
[DataMember(Name = "data")]
public SerializableDictionary<string, object> Data { get;set; }
public ResponseObject()
{
Data = new SerializableDictionary<string, object>();
}
}
...
var d1 = new ResponseObject();
d1.Data.Add("some key", "some value"); //WORKS AND SERIALIZES PERFECLTY
var d2 = new ResponseObject();
d2.Data.Add("some other key", new SomeOtherObjecT());
var d3 = new ResponseObject();
d3.Data.Add("another key", d2); //THIS THROWS THE UNEXPECTED TYPE ERROR WHEN SEIRLAIZING SomeOtherObject
Edit: L'errore è gettato in SerializableDictionary dove sta tentando di serializzare un oggetto di digitare ResponseObject. I due sono in progetti separati - se questo è significativo?
Cose geniali, molte grazie. Funziona a meraviglia. – clicky