EDIT: il momento in cui ho fatto la domanda mi thougt di provare qualcosa .. Ho impostato proprietà XMLNamespace sulla richiesta e che ha fatto il trucco ..RestSharp Deserialize ritorna proprietà vuote ma xml.deserialize test funziona
request.XmlNamespace = "http://musicbrainz.org/ns/mmd-2.0#";
Ma io non capisco il motivo per cui ...
problema successivo è ottenere RestSharp riconoscere atributes XML come proprietà dell'oggetto
L'ho passato per la maggior parte del weekend e non riesco a farlo funzionare.
Sto provando a scrivere un wrapper attorno a un webservice RestFul (MusicBrainz). Sto testando con un semplice esempio: ottieni i dettagli di un artista e inseriscilo in un oggetto Artist personalizzato.
quando faccio una eseguire sul RestClient si finisce male, ma le mie proprietà degli oggetti sono nulli .. Ma quando ho testare la deserializzazione con la XmlDeserializer i ObjectProperties sono riempiti (ma non per le proprietà che corrispondono a un attributo, ma io ne parleremo più avanti)
Cosa succede tra la deserializzazione della risposta e la messa dell'oggetto in response.data? Piuttosto possibile si tratta di un errore "newbie" Sto facendo come questo sono i miei primi passi con RestSharp ..
Aiuto sarebbe molto apprezzato ..
xml Returnded:
<metadata>
<artist type="Group" id="f1548c5b-329e-4036-921c-02213a04b525">
<name>Uriah Heep</name>
<sort-name>Uriah Heep</sort-name>
<country>GB</country>
<life-span>
<begin>1970</begin>
</life-span>
</artist>
</metadata>
mio classe:
public class Artist
{
public int Id { get; set; }
public string Type { get; set; }
public string Name { get; set; }
public string SortName { get; set; }
public string Country { get; set; }
}
Nelle seguenti proprietà di output codice sono riempiti
var output = xml.Deserialize<Artist>(response);
Ma la stessa risposta non riempie proprietà al momento della chiamata
var response = client.Execute<T>(request);
completo del codice (ho messo il codice di prova nel metodo generico per semplicità):
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = BaseUrl;
client.Authenticator = null;
//does not fill properties
var response = client.Execute<T>(request);
if (response.ErrorException != null)
{
throw response.ErrorException;
}
var xml = new XmlDeserializer();
//fills properties
var output = xml.Deserialize<Artist>(response);
return response.Data;
}
Ho trovato una soluzione sarei interessato :-) –
@ AndersBornholm. È passato molto tempo da quando ho lavorato su questo progetto. Ma per quanto riguarda la mia memoria, la "soluzione" è stata quella di impostare uno spazio dei nomi sulla richiesta RestSharp. Se sei davvero disperato, posso scavare il progetto e dare uno sguardo più da vicino ... – FasterRaf
In realtà non ho lavorato su il mio progetto o per molto tempo. L'ho risolto usando qualcosa di diverso da restsharp se non ricordo male :-) –