#c#
#c#
Вопрос:
у меня есть XML-файл, и я пытаюсь заполнить свой список данными с помощью десериализации.
мой xml находится здесь
<?xml version="1.0" ?>
<CustomerQueryRs>
<CustomerRet>
<ListID>6BE0000-1159990808</ListID>
<Name> Blaine Bailey</Name>
<FullName> Blaine Bailey</FullName>
<Phone>866-855-0800</Phone>
</CustomerRet>
<CustomerRet>
<ListID>9BA0000-1165353294</ListID>
<Name> Brian Boyd</Name>
<FullName> Brian Boyd</FullName>
<Phone>203-245-1877</Phone>
</CustomerRet>
<CustomerRet>
<ListID>9280000-1164147562</ListID>
<Name> Brian Leahy</Name>
<FullName> Brian Leahy</FullName>
<Phone>508-341-0955</Phone>
</CustomerRet>
</CustomerQueryRs>
здесь я привожу свой полный код. я просто не понимаю, почему мой код не работает…чего не хватает в моем code……it не выдает ошибку, но список не заполняется. итак, пожалуйста, скажите мне, какую область мне нужно исправить в коде.
[XmlTypeAttribute(AnonymousType = true)]
public class CustomersData
{
[XmlArray(ElementName = "CustomerQueryRs")]
[XmlArrayItem(ElementName = "CustomerRet")]
public List<Customer> Customers { get; set; }
public CustomersData()
{
Customers = new List<Customer>();
}
}
public class Customer
{
[XmlElement(ElementName = "ListID")]
public string ListID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "FullName")]
public string FullName { get; set; }
[XmlElement(ElementName = "Phone")]
public string Phone { get; set; }
}
вот мой код десириализации
private object DeserialzeXml(string xml)
{
var xmlSer = new XmlSerializer(typeof(CustomersData), new XmlRootAttribute("CustomerQueryRs"));
var stringReader = new StringReader(xml);
return xmlSer.Deserialize(stringReader);
}
пожалуйста, помогите……
Комментарии:
1. Не могли бы вы, пожалуйста, повторно отредактировать свой XML-файл?
Ответ №1:
Это должно сработать:
[XmlElement("CustomerRet")]
public List<Customer> Customers { get; set; }
И полный пример:
[XmlTypeAttribute(AnonymousType = true)]
public class CustomersData
{
[XmlElement("CustomerRet")]
public List<Customer> Customers { get; set; }
public CustomersData()
{
Customers = new List<Customer>();
}
}
public class Customer
{
[XmlElement(ElementName = "ListID")]
public string ListID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "FullName")]
public string FullName { get; set; }
[XmlElement(ElementName = "Phone")]
public string Phone { get; set; }
}
class Program
{
static void Main()
{
var xml =
@"<?xml version=""1.0"" ?>
<CustomerQueryRs>
<CustomerRet>
<ListID>6BE0000-1159990808</ListID>
<Name> Blaine Bailey</Name>
<FullName> Blaine Bailey</FullName>
<Phone>866-855-0800</Phone>
</CustomerRet>
<CustomerRet>
<ListID>9BA0000-1165353294</ListID>
<Name> Brian Boyd</Name>
<FullName> Brian Boyd</FullName>
<Phone>203-245-1877</Phone>
</CustomerRet>
<CustomerRet>
<ListID>9280000-1164147562</ListID>
<Name> Brian Leahy</Name>
<FullName> Brian Leahy</FullName>
<Phone>508-341-0955</Phone>
</CustomerRet>
</CustomerQueryRs>";
var serializer = new XmlSerializer(typeof(CustomersData), new XmlRootAttribute("CustomerQueryRs"));
using (var stringReader = new StringReader(xml))
using (var reader = XmlReader.Create(stringReader))
{
var result = (CustomersData)serializer.Deserialize(reader);
Console.WriteLine(result.Customers[1].FullName);
}
}
}
Комментарии:
1. сделайте мне одолжение еще раз, если в xml будут данные типа decimal или datetime, и если несколько данных типа date или decimal будут равны null, то как я могу обрабатывать null во время десериализации. пожалуйста, обсудите.
Ответ №2:
Читаемый код для преобразования xml в список
string xmlString = System.IO.File.ReadAllText(@"C:UsersuserDownloadsuserDetail.xml");
List<GridViewDetails> userDetail = (List<GridViewDetails>)ConvertXmlStringtoObject<List<GridViewDetails>>(xmlString);
static T ConvertXmlStringtoObject<T>(string xmlString)
{
T classObject;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringReader stringReader = new StringReader(xmlString))
{
classObject = (T)xmlSerializer.Deserialize(stringReader);
}
return classObject;
}