Я новичок в RestSharp и пытаюсь получить доступ к моему дозвуковому серверу через subsonic-api. Каждый ответ, завернутый в тег дозвукового ответа, например.RestSharp: ItemChoice всегда null
<subsonic-response xmlns="http://subsonic.org/restapi"
status="ok" version="1.10.1">
<artists ignoredArticles="The El La Los Las Le Les">
<index name="A">
<artist id="5449" name="A-Ha" coverArt="ar-5449" albumCount="4"/>
<artist id="5421" name="ABBA" coverArt="ar-5421" albumCount="6"/>
<artist id="5432" name="AC/DC" coverArt="ar-5432" albumCount="15"/>
<artist id="6633" name="Aaron Neville" coverArt="ar-6633" albumCount="1"/>
</index>
<index name="B">
<artist id="5950" name="Bob Marley" coverArt="ar-5950" albumCount="8"/>
<artist id="5957" name="Bruce Dickinson" coverArt="ar-5957" albumCount="2"/>
</index>
</artists>
XSD генерироваться следующие классы для сериализации:
public partial class Response
{
private object itemField;
private ItemChoiceType itemElementNameField;
private ResponseStatus statusField;
private string versionField;
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
public object Item
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
}
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemChoiceType ItemElementName
{
get
{
return this.itemElementNameField;
}
set
{
this.itemElementNameField = value;
}
}
public ResponseStatus status
{
get
{
return this.statusField;
}
set
{
this.statusField = value;
}
}
public string version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
}
public partial class ArtistsID3
{
private List<IndexID3> indexField;
public ArtistsID3()
{
this.indexField = new List<IndexID3>();
}
public List<IndexID3> index
{
get
{
return this.indexField;
}
set
{
this.indexField = value;
}
}
}
public enum ItemChoiceType
{
/// <remarks/>
album,
/// <remarks/>
albumList,
--- snip ----
Когда я пытаюсь десериализации в ответ-Object поле Item всегда утратившим ItemElementName получает первое значение из перечисления ItemChoiceType, но версия и статус правильно установлены. Полученный xml-вывод выглядит как ожидаемый (см. Образец). Что работает, но десериализуется в ArtistsID3, но потом я теряю статус.
Вот код:
SubsonicApi api = new SubsonicApi();
var request = new RestRequest();
request.Resource = "getArtists.view";
request.AddParameter("v", "1.10.2");
request.AddParameter("c", "no name yet");
// Item always null!
// var response = api.Execute<Response>(request);
var response = api.Execute<ArtistsID3>(request);
public T Execute<T>(RestRequest request)
where T : new()
{
var client = new RestClient();
client.BaseUrl = new System.Uri(BaseUrl);
client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey);
var response = client.Execute<T>(request);
Console.WriteLine("RESPONSE-DATA: " + response.Content);
return response.Data;
}
Я был бы рад, если кто-то может мне точку в правильном направлении, я думаю, что правильный путь должен быть доступ к данным с помощью объекта Response. На самом деле не знаю, как отладить это не ожидаемое поведение.
Спасибо, спускаясь более ручной маршрут работает нормально, используя классы RestSharp является (De) сериализации отлично. Я добавил еще одно поле (лицензия) в SubsonicResponse, чтобы проверить, работает ли оно с другими вызовами api, и все в порядке. – Rob
Если вы можете сериализовать, то вы всегда сможете де-сериализовать те же классы и данные. Вот почему мне нравится сначала сериализовать и проверить, что файл xml хорош. – jdweng