【发布时间】:2020-08-11 09:12:58
【问题描述】:
我得到一个 xml 字符串,我需要将此 xml 转换为 .NET 对象 然后,创建一个服务来反序列化或 xml。但它不适用于“参数”道具。
代码:
[XmlRoot(ElementName = "mse-response")]
public class xmlObject
{
[XmlElement(DataType = "string", ElementName = "status-code")]
public string StatusCode { get; set; }
[XmlElement(DataType = "string", ElementName = "profile")]
public string Profile { get; set; }
[XmlElement(DataType = "string", ElementName = "transaction-id")]
public string TransactionId { get; set; }
[XmlArray(ElementName = "parameters")]
public Item[] Parameters { get; set; }
}
public class Item
{
[XmlElement(ElementName = "param-name")]
public string Name { get; set; }
[XmlElement(ElementName = "param-value")]
public string Value { get; set; }
}
助手:
public class XmlHelperService
{
public static T XmlDeserializeFromString<T>(string xmlString)
{
var serializar = new XmlSerializer(typeof(T));
using (var reader = new StringReader(xmlString))
{
return (T)serializar.Deserialize(reader);
}
}
}
还有我的 XML:
<?xml version="1.0" encoding="UTF-8" ?>
<mse-response>
<status-code>0</status-code>
<profile>profleID</profile>
<transaction-id>1010608241424538336</transaction-id>
<parameters>
<param-item>
<param-name>INITIALDATE</param-name>
<param-value>0608151207</param-value>
</param-item>
<param-item>
<param-name>SMPP_MESSAGE_STATUS</param-name>
<param-value>DELIVRD</param-value>
</param-item>
<param-item>
<param-name>ANUM</param-name>
<param-value>333</param-value>
</param-item>
<param-item>
<param-name>BNUM</param-name>
<param-value>1191000000</param-value>
</param-item>
<param-item>
<param-name>FINALDATE</param-name>
<param-value>0608151207</param-value>
</param-item>
<param-item>
<param-name>MSGSTATUS</param-name>
<param-value>2</param-value>
</param-item>
</parameters>
</mse-response>
【问题讨论】:
-
当您有一个数组时,xml 序列化默认为两级标签,如参数和参数。如果您只有一个标签,那么您需要使用 [XmlArray()] [XmlElement} 来代替。如果两个标签名称不同,则需要同时使用 [XmlArray("Parameters")] 和 XmlArrayItem("Item")]。