我正在与第三方合作,该第三方拥有针对多个不同请求的xml结构。
每个请求都有一个共同的头结构,然后是一些特定的页脚数据。
不幸的是,页眉和页脚部分没有包含在他们自己的元素标签中,这是我无法改变的。
一些样本设计请求如下所示:
样品申请1
<?xml version="1.0" encoding="UTF - 8" standalone="yes"?>
<Request>
<RequestType>1</RequestType>
<User>User01</User>
<id>1234</id>
<Name>John</Name>
<Age>20</Age>
</Request>
样品申请2
<?xml version="1.0" encoding="UTF - 8" standalone="yes"?>
<Request>
<RequestType>2</RequestType>
<User>User02</User>
<id>1235</id>
<School>The School</School>
<Teacher>Mrs Smith</Teacher>
</Request>
样品申请3
<?xml version="1.0" encoding="UTF - 8" standalone="yes"?>
<Request>
<RequestType>3</RequestType>
<User>User01</User>
<id>223</id>
<Work>The Office</Word>
<Boss>Mr White</Boss>
<Phone>1234567</Phone>
<Payday>Friday</Payday>
</Request>
您可以看到每个请求都有 RequestType ,用户和 ID 。
我的问题与编写C#代码有关,它将封装此Xml以进行序列化。
对我来说,似乎错误让我的每个C#类都有重复的标题( RequestType ,用户和 id )数据。
我尝试过使用泛型(请参阅下面的示例代码)但这导致了我的问题。
问题:如何序列化我的通用对象Footer
,使其不包含在&#34; root&#34; 页脚元素?
[System.Xml.Serialization.XmlRoot("Request")]
public class GenericRequest<typeT>
{
public GenericRequest()
{
}
public int RequestType { get; set; }
public string User { get; set; }
public int id { get; set; }
public typeT Footer { get; set; }
}
答案 0 :(得分:1)
您可以使用接口IFooter创建一个类,它可以根据需要使用不同的实现者(例如
interface IFooter : ISerializable
{
//Define common member.
}
public class Footer1: IFooter
{
// define members (e.g. work)
}
public class Footer2: IFooter
{
// define members
}
public class Footer3: IFooter
{
// define members
}
现在序列化主类
[System.Xml.Serialization.XmlRoot("Request")]
public class GenericRequest
{
public GenericRequest()
{
}
public int RequestType { get; set; }
public string User { get; set; }
public int id { get; set; }
public IFooter Footer { get; set; }
}
访问How can I serialize an object that has an interface as a property?以供参考。