У меня есть xml, который не очень хорошо сформирован, но мне нужно сопоставить список с RestSharp. У меня нет контроля над выводом службы/xml. До сих пор мне удавалось обойти проблемы с самими свойствами, используя свойство DeserializeAs(Name="name")]
. Например,
public class Physician
{
[DeserializeAs(Name = "personId")]
public string Id { get; set; }
[DeserializeAs(Name = "fName")]
public string FirstName { get; set; }
[DeserializeAs(Name = "lName")]
public string LastName { get; set; }
}
Правильно сопоставляется со списком, когда у меня есть следующий xml:
<data>
<physician>
<personId>3325</personId>
<fName>Foo</fName>
<lName>Bar</lName>
</physician>
<physician>
<personId>3342</personId>
<fName>Jane</fName>
<lName>Doe</lName>
</physician>
...
</data>
Функция, которую я использую:
public static List<T> GetListOfEntityType<T>(string url)
{
return Client.Execute<List<T>>(new RestRequest(url)).Data;
}
Проблема в том, что у меня есть xml, который выглядит так для ряда других запросов,
<data>
<row>
<typeId>0</typeId>
<type>Physician</type>
</row>
<row>
<typeId>1</typeId>
<type>Ambulance</type>
</row>
...
</data>
Учитывая, что это не очень описательный xml, но мне нужно сопоставить его со списком.
public class OrganizationType
{
public string typeId { get; set; }
public string type { get; set; }
}
https://stackoverflow.com/a/4082046/3443716 несколько отвечает на это, и это, безусловно, работает, но я не хочу, чтобы модель называлась row
Я пытался сделать так:
[DeserializeAs(Name = "row")]
public class OrganizationType
{
public string typeId { get; set; }
public string type { get; set; }
}
Однако RestSharp полностью игнорирует этот атрибут. Я искал тонну и нашел несколько ответов, которые предлагают использовать собственный десериализатор, но мне трудно поверить, что это единственный или самый простой вариант в этом отношении. Есть ли какой-то другой атрибут, который мне может не хватать, или это единственный вариант использования пользовательского десериализатора?
В качестве еще одного примечания, я также пытался сделать что-то подобное, и я просто возвращаю ноль....
public class OrganizationType
{
public string typeId { get; set; }
public string type { get; set; }
}
public class OrgTypeCollection
{
[DeserializeAs(Name = "row")]
public List<OrganizationType> Names { get; set; }
}