C # XML-сериализация с многочисленными элементами данных - PullRequest
0 голосов
/ 08 января 2010

У меня есть какой-то XML, который я пытаюсь сериализовать так:

                        string Value = @"<MSG>
                        <ABCID>
                          <ID>0123456789A</ID>
                          <ID>0123456790B</ID>
                        </ABCID>
                        <DATETIME>2010-01-07T13:00:09</DATETIME>
                        </MSG>";

            try
            {
                XmlMsg Msg = (XmlMsg)new XmlSerializer(typeof(XmlMsg)).Deserialize(new System.IO.StringReader(Value));
            }
            catch (System.Exception ex)
            {

            }

Обычно я получаю только один идентификатор в узле ABCID, так что все в порядке, однако для нового требования требуется более одного идентификатора, поэтому при сериализации я хочу видеть все идентификаторы, в данный момент он просто показывает первый идентификатор.

Это мой сериализационный класс:

[XmlRoot("MSG")]
public class XmlMsg
{

    [XmlElement("ABCID", IsNullable = true)]
    public SubNodes AbcId { get; set; }

    [XmlElement("DATETIME", IsNullable = true)]
    public string DateTime { get; set; }
}


public class SubNodes
{



    [XmlElement("ID", IsNullable = true)]
    public string Id { get; set; }

}

Ответы [ 3 ]

0 голосов
/ 08 января 2010

В вашем коде фактически есть только один ID для каждого XmlMsg, поскольку класс SubNodes содержит только одно свойство ID. Вы, вероятно, хотите заменить AbcId на набор строк.

0 голосов
/ 08 января 2010

Вам необходимо установить свойство Id класса SubNodes как элемент массива соответствующего типа данных. Вот рабочий пример использования консольного приложения).

using System;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    [XmlRoot("MSG")]
    public class XmlMsg
    {

        [XmlElement("ABCID", IsNullable = true)]
        public SubNodes AbcId { get; set; }

        [XmlElement("DATETIME", IsNullable = true)]
        public string DateTime { get; set; }
    }

    public class SubNodes
    {
        [XmlElement("ID", IsNullable = true)]
        public string[] Id { get; set; }
    }

    class Program
    {
        static void Main()
        {
            string value = @"<MSG>
                        <ABCID>
                          <ID>0123456789A</ID>
                          <ID>0123456790B</ID>
                        </ABCID>
                        <DATETIME>2010-01-07T13:00:09</DATETIME>
                        </MSG>";

            try
            {
                XmlMsg message = (XmlMsg)new XmlSerializer(typeof(XmlMsg)).Deserialize(new System.IO.StringReader(value));

                foreach (var subNode in message.AbcId.Id)
                {
                    Console.WriteLine(subNode);
                }

            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            Console.Read();
        }
    }
}
0 голосов
/ 08 января 2010

не могу у вас что-то подобное в вашем классе:

private List<string> _IDList = new List<string>();

...

[XmlElement(ElementName= "ID")]
        public List<string> IDList
        {
            get
            {
                return _IDList;
            }
            set
            {
                _IDList = value;
            }
        }
...