反序列化集合的一个元素
本文关键字:一个 元素 集合 反序列化 | 更新日期: 2023-09-27 18:12:38
我正在反序列化来自API的XML响应。
<?xml version="1.0" encoding="UTF-8"?>
<categories type="array">
<category>
<parent-id />
<name>Şirketiçi</name>
<count type="integer">0</count>
<elements-count type="integer">0</elements-count>
<id type="integer">18940</id>
<type>ProjectCategory</type>
</category>
</categories>
我可以使用下面的类像上面那样反序列化XML响应。
[XmlRoot("categories")]
public class CategoriesResponse :IEntityResponse
{
public CategoriesResponse()
{
Categories = new List<Category>();
}
[XmlElement("category")]
public List<Category> Categories { get; set; }
}
但我也得到响应与一个类别节点如下面的API。
<?xml version="1.0" encoding="UTF-8"?>
<category>
<parent-id />
<name>Şirketiçi</name>
<count type="integer">0</count>
<id type="integer">18940</id>
<elements_count type="integer">0</elements_count>
<type>ProjectCategory</type>
</category>
所以我为这个响应写了一个带有Category属性的类,但是不能反序列化。
[XmlRoot("category")]
public class CategoryResponse
{
public CategoryResponse()
{
}
[XmlElement("category")]
public Category Category;
public string STATUS { get; set; }
}
我想使用Category类进行反序列化。我应该为这个XML响应使用哪个类定义?
第二个响应(类别)是根节点,不包含category
子节点。你应该把它反序列化为Category
。
我猜你的Category
类看起来像这样:
[XmlRoot("category")]
public class Category
{
public Category() { }
[XmlElement("parent-id")]
public int ParentId {get;set}
[XmlElement("name")]
public string Name {get;set}
[XmlElement("count")]
public int Count {get;set}
[XmlElement("id")]
public string Id {get;set}
[XmlElement("elements_count")]
public int ElementsCount {get;set}
[XmlElement("type")]
public string Type {get;set}
}
不需要序列化。在这种情况下,我会使用XML Linq。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input =
"<?xml version='"1.0'" encoding='"UTF-8'"?>" +
"<categories type='"array'">" +
"<category>" +
"<parent-id />" +
"<name>Şirketiçi</name>" +
"<count type='"integer'">0</count>" +
"<elements-count type='"integer'">0</elements-count>" +
"<id type='"integer'">18940</id>" +
"<type>ProjectCategory</type>" +
"</category>" +
"</categories>";
XDocument doc = XDocument.Parse(input);
List<Category> categories = new List<Category>();
foreach (XElement category in doc.Descendants("category"))
{
Category newCategory = new Category();
categories.Add(newCategory);
newCategory.parentID = category.Element("parent-id") == null ? null : category.Element("parent-id").Value.Length == 0 ? null : (int?)category.Element("parent-id");
newCategory.name = category.Element("name") == null ? null : category.Element("name").Value.Length == 0 ? null : (string)category.Element("name");
newCategory.count = category.Element("count") == null ? null : category.Element("count").Value.Length == 0 ? null : (int?)category.Element("count");
newCategory.elementsCount = category.Element("elements-count") == null ? null : category.Element("elements-count").Value.Length == 0 ? null : (int?)category.Element("elements-count");
newCategory.id = category.Element("id") == null ? null : category.Element("id").Value.Length == 0 ? null : (int?)category.Element("id");
newCategory._type = category.Element("type") == null ? null : (string)category.Element("type");
}
}
public class Category
{
public int? parentID { get; set; }
public string name { get; set; }
public int? count { get; set; }
public int? elementsCount { get; set; }
public int? id { get; set; }
public string _type { get; set; }
}
}
}