這是我的情況。我需要創建一個基於現有對象類的新應用程序,我不允許更改其他項目正在使用的對象類。但我需要將這些對象與新應用程序中的新對象結合使用。在我的新應用程序中,每個操作都會有一個請求和響應類,它們將被序列化/不需要,因爲它將通過套接字發送給另一個公司。然後,我將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: