簡體   English   中英

XmlSerializer。只反序列化特定的類

[英]XmlSerializer.Deserialize only specific classes

這是我的情況。 我需要創建一個基於現有對象類的新應用程序,由於其他項目正在使用該類,因此我不允許對其進行更改。 但是我需要在新應用程序中將這些對象與新對象結合使用。 在我的新應用程序中,每個動作都將具有一個請求和響應類,由於將通過套接字將其發送給另一家公司,因此將對其進行序列化/反序列化。 然后,我向公司提供XSD,他們將使用它們來形成響應並以XML的形式發送回去。 然后,我需要將XML反序列化到新創建的對象中,在這種情況下,該對象稱為GetAccountDetailsMessageResponse。

[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; }
}

正如您在此處看到的那樣,該類現有的類結構非常令人討厭,因為大多數類都是從Header派生的。 甚至代表單個帳戶的實際實體AccountResponse也從ResponseHeader派生。 大豆使您到處都有ResponseHeaders。

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

我的問題是,原始AccountsResponse類是從ResponseHeader派生的,我已經在GetAccountDetailsMessageResponse中定義了自己的標頭屬性作為屬性標頭。

**所以這是我的問題:如何獲得XSD工具,甚至編寫將對象序列化為XML的C#方法,但是在AccountsResponse類中忽略ResponseHeader。 因此,它只應序列化AccountsResponse中的所有內容,而忽略將從ResponseHeader派生的所有內容。

最后,我希望XSD.exe工具或自定義C#方法生成XSD,該XSD將提供如下所示的XML:

在此處輸入圖片說明

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM