Как я преобразую строку xml с массивом параметров для объекта в. NET Core - PullRequest
0 голосов
/ 27 апреля 2020

Я получаю строку 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>

1 Ответ

0 голосов
/ 27 апреля 2020

1) Вы можете использовать инструмент для создания XSD из xml.

2) Получив XSD, вы можете использовать xsd.exe из Visual 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 определите свойство properties с атрибутом XmlArrayItemAttribute:

[XmlRoot(ElementName = "mse-response")]
public class xmlObject
{
    ...
    [XmlArrayItemAttribute("param-item", IsNullable = false)]
    public Item[] parameters { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...