2013-07-01 85 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。

使用Microsoft的XSD.exe工具,會創建一個自動生成的XSD,我需要將其提供給其他公司。

我的問題在於,原AccountsResponse類派生自ResponseHeader,我已經在GetAccountDetailsMessageResponse中將自己的頭屬性定義爲Property Header。

**這裏是我的問題:如何獲取XSD工具,甚至編寫一個將對象序列化爲XML的C#方法,但忽略AccountsResponse類中的ResponseHeader。所以它應該只序列化AccountsResponse中的所有內容,並忽略從ResponseHeader派生的所有內容。

最後,我想xsd.exe工具或定製的C#方法,以產生一個XSD,這將提供一個看起來像這樣的XML:

enter image description here

回答

0

覆蓋所有ResponseHeader/AccountsResponse中的MessageHeader屬性並將XMLIgnore屬性附加到它們,或者作爲替代將定義傳遞模式的函數的XmlSchemaProvider屬性附加到類。