Как создать модель класса C # для получения сериализованного запроса XML в заданном формате? - PullRequest
2 голосов
/ 13 июля 2011

Я проектирую модель своего класса.Сериализованное сообщение модели класса должно иметь следующий формат:

<?xml version="1.0" encoding="UTF-8" ?>
<Request>
  <Name>TesterScript</Name>
  <ID>CD_20110628133820576</ID>
  <Type>
    <ItemId>191_20110628T133821</ItemId>
    <ShopId>MyBCShop</ShopId>
    <MessageXml>
    <ChildMessage>
      This is my message
    </ChildMessage>
    </MessageXml>
  </Type>
  <SentTime>2011-06-30T15:27:06-07:00</SentTime>
</Request>

Как бы я спроектировал классы?Кроме того, каким должен быть лучший способ сериализации предлагаемой модели классов для сообщения XML выше?Я думаю об использовании:

// Serialize the request
XmlSerializer xs = new XmlSerializer(typeof(Request));
StringWriter sw = new StringWriter();
xs.Serialize(sw, dispatchRequest);
string xml = sw.ToString();
return new xml;

Это самый подходящий способ?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Если у вас уже есть схема, я бы просто использовал xsd.exe для генерации класса. Он уже будет помечен как сериализуемый, и вам не нужно будет ничего делать, кроме вызова базы XmlSerializer (как вы делаете во втором фрагменте, более или менее).

1 голос
/ 13 июля 2011

Надеюсь, мое решение будет полезным ....

Содержимое xml (я думаю, что в вашем посте что-то не так ...)

<?xml version="1.0" encoding="utf-8" ?>
<Request>
  <Name>TesterScript</Name>
  <ID>CD_20110628133820576</ID>
  <Type>
    <ItemId>191_20110628T133821</ItemId>
    <ShopId>BARCGB2L</ShopId>
    <MessageXml>
      <ChildMessage>
        This is my message
      </ChildMessage>
    </MessageXml>
  </Type>
  <SentTime>2011-06-30T15:27:06-07:00</SentTime>
</Request>

Класс:

[XmlRoot("Request")]
public class SampleClass
{
    public string Name { get; set; }
    public string ID { get; set; }
    [XmlElement("Type")]
    public SubClass SC { get; set; }
    public string SentTime { get; set; }

    public class SubClass
    {
        public string ItemId { get; set; }
        public string ShopId { get; set; }
        [XmlElement("MessageXml")]
        public Sub2Class SC2 { get; set; }

        public class Sub2Class
        {
            public string ChildMessage { get; set; }
        }
    }
}

Метод десериализации:

public static T DeserializeForXml<T>(string filePath)
    {
        XmlSerializer selializer = new XmlSerializer(typeof(T));
        using (Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            return (T)selializer.Deserialize(fs);
        }
    }

Как использовать?

SampleClass sc = Utility.DeserializeForXml<SampleClass>("test.xml");
...