0

这是我的情况。我需要创建一个基于现有对象类的新应用程序,当其他项目使用它时,我不允许更改它。但是我需要在我的新应用程序中将这些对象与新对象结合使用。在我的新应用程序中,每个操作都有一个请求和响应类,它们将被序列化/反序列化,因为它将通过套接字发送到另一家公司。然后我将 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,这将提供如下所示的 XML:

在此处输入图像描述

4

1 回答 1

0

覆盖 AccountsResponse 中的所有 ResponseHeader/MessageHeader 属性并将 XMLIgnore 属性附加到它们,或者附加一个 XmlSchemaProvider 属性,定义一个传递架构的函数到类。

于 2013-07-01T11:17:43.360 回答