2013-07-01 2 views
0

Это моя ситуация. Мне нужно создать новое приложение, основанное на существующих классах объектов, которое мне не разрешено изменять, поскольку оно используется другими проектами. Но мне нужно использовать этот объект в сочетании с новыми объектами в моем новом приложении. В моем новом приложении каждое действие будет иметь класс запроса и ответа, который будет сериализован/обезврежен, поскольку он будет отправлен через сокеты другой компании. Затем я предоставляю XSD компании, которую они будут использовать для формирования ответа и отправки обратно в формате XML. Затем мне нужно десериализовать XML в мой вновь созданный объект, в этом случае его вызвал GetAccountDetailsMessageResponse.XmlSerializer.Deserialize только для определенных классов

[System.Xml.Serialization.XmlRoot("GetAccountDetailsMessageResponse", Namespace = "http://test.com.au/")] 
public class GetAccountDetailsMessageResponse 
{ 
      public MyNewHeader Header 
    { 
     get; 
     set; 
    } 

    public AccountsResponse Response 
    { 
     get; 
     set; 
    } 
} 

//Here is the existing class structure which I need to use, and cannot 

// MAIN CLASS - Containing collection of Accounts 
public class AccountsResponse : ResponseHeader 
{ 
    public AccountsResponse() 
    { 
     Accounts = new List<AccountResponse>(); 
    } 

    public List<AccountResponse> Accounts { get; set; } 
} 

public class AccountResponse : ResponseHeader 
{ 
    public int AccountNumber { get; set; } 

    public string AccountType { get; set; } 
} 

public class ResponseHeader : MessageHeader 
{ 
    public string ReservedField1 { get; set; } 

    public string ReservedField2 { get; set; } 

    public string TextMessage { get; set; } 

    public string Status { get; set; } 

    public TransactStatus TransactStatus { get; set; } 
} 

public class MessageHeader 
{ 
    public string Function { get; set; } 

    public string MessageID { get; set; } 

    public int CustomerNumber { get; set; } 

    public string AccessCode { get; set; } 

    public string SessionID { get; set; } 

    public int Flag { get; set; } 
} 

Как вы можете видеть здесь, класс существующей структуре класса очень раздражает, как большинство классов проистекают из заголовка. Даже фактический объект AccountResponse, который представляет собой отдельную учетную запись, происходит от ResponseHeader. Сой, вы в конечном итоге с ResponseHeaders повсюду.

С помощью инструмента XSD.exe от Microsoft создается автоматически созданный XSD, который мне нужно предоставить другой компании.

Моя проблема в том, что исходный класс AccountsResponse происходит от ResponseHeader, я уже определил собственное свойство заголовка в GetAccountDetailsMessageResponse как заголовок свойства.

** Итак, вот мой вопрос: как получить XSD-инструмент или даже написать метод C#, который сериализует объект в XML, но IGNORE ResponseHeader в классе AccountsResponse. Поэтому он должен только сериализовать все в AccountsResponse и игнорировать все, что будет получено от ResponseHeader.

В конце концов, я хочу инструмент Xsd.exe, или метод пользовательских C#, для создания XSD, что обеспечит XML, который выглядит следующим образом:

enter image description here

ответ

0

Override все ResponseHeader/Свойства MessageHeader в AccountsResponse и прикрепить к ним атрибут XMLIgnore или как альтернативное приложить атрибут XmlSchemaProvider, определяющий функцию, предоставляющую схему, классу.

Смежные вопросы