【发布时间】:2022-01-08 12:59:15
【问题描述】:
这是我收到的来自 SOAP 调用的响应的 XML:
<?xml version='1.0' encoding='UTF-8'?>
<Usage_Data Public="0">
<Type_Data Primary="1">
<Type_Reference>
<ID type="WID">4fae289a7fe541b098ca9448e462ff6b</ID>
<ID type="Communication_Usage_Type_ID">BUSINESS</ID>
</Type_Reference>
</Type_Data>
<Use_For_Reference>
<ID type="WID">7a232f5736a840a393b8ab43df7becd5</ID>
<ID type="Communication_Usage_Behavior_ID">BILLING</ID>
</Use_For_Reference>
<Use_For_Reference>
<ID type="WID">b58a4a54e04c4e1f8fc32bfc3b1a77cf</ID>
<ID type="Communication_Usage_Behavior_ID">SHIPPING</ID>
</Use_For_Reference>
<Use_For_Reference>
<ID type="WID">8f470e4f6ffd49638c80ea6b5443bddb</ID>
<ID type="Communication_Usage_Behavior_ID">REMIT</ID>
</Use_For_Reference>
</Usage_Data>
我已经使用它创建了一个 C# 类,以便我可以反序列化 XML。生成的类很丑陋,不幸的是它不起作用。我已经对其进行了足够的调整以使其有些工作。最大的问题在于“Use_For_Reference”元素。每个“ID”元素中的“type”属性没有被拉入反序列化的类中。
[Serializable]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class Usage_Data
{
private Usage_DataType_Data type_DataField;
private List<Usage_DataUse_For_ReferenceID> use_For_ReferenceField;
private byte publicField;
public Usage_DataType_Data Type_Data
{
get => type_DataField;
set => type_DataField = value;
}
[XmlArrayItem("ID", typeof(Usage_DataUse_For_ReferenceID), IsNullable = false)]
public List<Usage_DataUse_For_ReferenceID> Use_For_Reference
{
get => use_For_ReferenceField;
set => use_For_ReferenceField = value;
}
[XmlAttribute]
public byte Public
{
get => publicField;
set => publicField = value;
}
}
[Serializable]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true)]
public class Usage_DataType_Data
{
private Usage_DataType_DataID[] type_ReferenceField;
private byte primaryField;
[XmlArrayItem("ID", IsNullable = false)]
public Usage_DataType_DataID[] Type_Reference
{
get => type_ReferenceField;
set => type_ReferenceField = value;
}
[XmlAttribute]
public byte Primary
{
get => primaryField;
set => primaryField = value;
}
}
[Serializable]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true)]
public class Usage_DataType_DataID
{
private string typeField;
private string valueField;
[XmlAttribute]
public string type
{
get => typeField;
set => typeField = value;
}
[XmlText]
public string Value
{
get => valueField;
set => valueField = value;
}
}
[Serializable]
[System.ComponentModel.DesignerCategory("code")]
[XmlType(AnonymousType = true)]
public class Usage_DataUse_For_ReferenceID
{
private string typeField;
private string valueField;
[XmlAttribute]
public string type
{
get => typeField;
set => typeField = value;
}
[XmlText]
public string Value
{
get => valueField;
set => valueField = value;
}
}
请帮我弄清楚如何从 XML 反序列化中获取“类型”属性。谢谢!
【问题讨论】:
-
为什么不直接推出自己的 LINQ-to-XML 解决方案?
-
我的 XML 实际上比我上面显示的要复杂得多。我只显示我遇到问题的部分。我从来没有做过 LINQ-to-XML。如果我展示的东西大约有 5 层深,使用这个 XML 会不会很困难?
-
您能否展示您的完整 XML?也许在 pastebin 中?