C# 反序列化复杂XML
我从一个名为Ctera的应用程序收到以下XML:C# 反序列化复杂XML,c#,xml,C#,Xml,我从一个名为Ctera的应用程序收到以下XML: <obj class="TeamPortal"> <att id="activationStatus"> <val>Enabled</val> </att> <att id="name"> <val>dana</val> </att> <att id="creat
<obj class="TeamPortal">
<att id="activationStatus">
<val>Enabled</val>
</att>
<att id="name">
<val>dana</val>
</att>
<att id="createDate">
<val>2015-06-04T10:01:13</val>
</att>
<att id="alerts">
</att>
<att id="autoAssignmentRules">
<list></list>
</att>
<att id="totalStorage">
<obj class="TotalStorage">
<att id="totalAvailable">
<val>0</val>
</att>
<att id="totalInUse">
<val>0</val>
</att>
</obj>
</att>
</obj>
启用
达纳
2015-06-04T10:01:13
0
0
我想将其反序列化为如下所示的对象:
public class TeamPortal
{
public string activationStatus { get; set; }
public string name { get; set; }
public string createDate { get; set; }
public string alerts { get; set; }
public List<string> autoAssignmentRules { get; set; }
public TotalStorage totalStorage { get; set; }
}
public class TotalStorage
{
public int totalAvailable { get; set; }
public int totalInUse { get; set; }
}
公共类TeamPortal
{
公共字符串activationStatus{get;set;}
公共字符串名称{get;set;}
公共字符串createDate{get;set;}
公共字符串警报{get;set;}
公共列表自动分配规则{get;set;}
公共TotalStorage TotalStorage{get;set;}
}
公共类总存储
{
公共整数可用{get;set;}
公共整数totalInUse{get;set;}
}
我尽量避免将其解析为键值列表。
我对接收到的XML没有任何控制权。它确实是一个基于键值的结构。大多数C#序列化都是基于Node-s的。请检查:这只是一个设计糟糕的模式。您无法将XML文件反序列化为完全不同的对象结构。您需要在反序列化之前使用XSLT转换XML文件,或者在反序列化之后将键/值对映射到所需的结构。一种可能的解决方法是创建从DynamicObject派生的两个类,它们解析对键/值对查找的属性访问调用在列表对象之前添加以下内容:[XmlElement(“autoAssignmentRules”)]。XmlElement从XML输出中消除了不必要的标记。填充
autoAssignmentRules
列表时,XML是什么样子的?它定义为基于键值的结构。大多数C#序列化都是基于Node-s的。请检查:这只是一个设计糟糕的模式。您无法将XML文件反序列化为完全不同的对象结构。您需要在反序列化之前使用XSLT转换XML文件,或者在反序列化之后将键/值对映射到所需的结构。一种可能的解决方法是创建从DynamicObject派生的两个类,它们解析对键/值对查找的属性访问调用在列表对象之前添加以下内容:[XmlElement(“autoAssignmentRules”)]。XmlElement从XML输出中消除了不必要的标记。填充autoAssignmentRules
列表时,XML是什么样子的?