这是我的情况。我需要创建一个基于现有对象类的新应用程序,我不允许在其他项目使用它时进行更改。但是我需要在新应用程序中将这些对象与新对象结合使用。在我的新应用程序中,每个操作都有一个请求和响应类,它将被序列化/保存,因为它将通过套接字发送到另一个公司。然后,我将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,我需要将其提供给其他公司。
我的问题是,Original AccountsResponse类派生自ResponseHeader,我已经在GetAccountDetailsMessageResponse中将我自己的头属性定义为Property Header。
**所以这是我的问题:如何获取XSD工具,甚至编写将对象序列化为XML的C#方法,但IGNORE在AccountsResponse类中的ResponseHeader。所以它应该只序列化AccountsResponse中的所有内容,并忽略从ResponseHeader派生的所有内容。
最后,我希望XSD.exe工具或自定义C#方法生成一个XSD,它将提供如下所示的XML:
答案 0 :(得分:0)
覆盖AccountsResponse中的所有ResponseHeader / MessageHeader属性并将XMLIgnore属性附加到它们,或者作为替代方法将定义传递模式的函数的XmlSchemaProvider属性附加到类中。