XmlSerialization массива классов - PullRequest
       1

XmlSerialization массива классов

0 голосов
/ 29 августа 2011

У меня есть классы, определенные ниже (сгенерированные с использованием xsd):

[GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[SerializableAttribute]
[DebuggerStepThroughAttribute]
[DesignerCategoryAttribute("code")]
[XmlTypeAttribute(AnonymousType = true)]
[XmlRootAttribute(IsNullable = false)]
public class DataRequest
{
    private string _serviceField;
    private string _subscriptionField;

    public string Service
    {
        get
        {
            return _serviceField;
        }
        set
        {
            _serviceField = value;
        }
    }

    [XmlElement("Subscription"), DefaultValue(null)]
    public string Subscription
    {
        get
        {
            return _subscriptionField;
        }
        set
        {
            _subscriptionField = value;
        }
    }
}

Затем я определяю массив указанного выше класса:

DataRequest[] requests = new DataRequest[2];
requests[0] = new DataRequest();
requests[1] = new DataRequest();
...

Я хочу сериализовать этомассив и в конечном итоге с приведенным ниже:

  <SOAP-ENV:Body>
    <DataRequest>
      <Service>ServiceA</DataService>
      <Subscription />
    </DataRequest>
    <DataRequest>
      <Service>ServiceB</DataService>
      <Subscription />
    </DataRequest>
  </SOAP-ENV:Body>

Однако, когда я вызываю ниже, где input это массив:

XmlSerializer serializer = new XmlSerializer(typeof(input));
serializer.Serialize(writer, input);

Я получаю следующее:

  <Soap-ENV:Body>
    <ArrayOfDataRequest>
      <DataRequest>
        <Service>ServiceA</DataService>
        <Subscription />
      </DataRequest>
      <DataRequest>
        <Service>ServiceB</DataService>
        <Subscription />
      </DataRequest>
    </ArrayOfDataRequest>
  </Soap-ENV:Body>

Есть ли какой-нибудь способ, которым я могу избавиться от элемента ArrayOfDataRequest , и просто получить фактические элементы массива, сериализованные напрямую?

1 Ответ

0 голосов
/ 29 августа 2011

Пожалуйста, исправьте меня, если я ошибаюсь, но я думаю, что это совершенно верно в отношении сериализации, специфичной для SOAP.Непосредственный дочерний элемент тега body является элементом для параметра, в данном случае это массив объектов DataRequest.Когда сериализатор пропускает теги ArrayOf ..., сообщение SOAP вместо этого содержит два параметра типа DataRequest.

Может быть, вы можете указать, почему вам понадобится такое «сломанное» сообщение, чтобы найти решениеВы актуальная проблема?

...