首页 > 解决方案 > 如何将带有参数数组的字符串 xml 转换为 .NET Core 中的对象

问题描述

我得到一个 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>

标签: c#arrays.netxmlobject

解决方案


1)您可以使用工具来创建 xml 的 XSD

2) 拥有 XSD 后,您可以使用xsd.exeVisual Studio SDK 从中生成 C# 类。

命令是:

xsd.exe /classes /namespace:MyTest generatedXsd.xsd

3) XSD 或者生成的类可以添加到你的项目中,或者在这个测试中我们只在属性中查看生成的类properties,以了解它是如何生成的:

[System.Xml.Serialization.XmlArrayItemAttribute("param-item", IsNullable=false)]
public mseresponseParamitem[] parameters {
    get {
        return this.parametersField;
    }
    set {
        this.parametersField = value;
    }
}

因此,解决方案是,在类中xmlObject定义具有属性propertiesXmlArrayItemAttribute属性:

[XmlRoot(ElementName = "mse-response")]
public class xmlObject
{
    ...
    [XmlArrayItemAttribute("param-item", IsNullable = false)]
    public Item[] parameters { get; set; }
}

推荐阅读