c#serialize没有根元素的对象

时间:2017-09-11 10:43:12

标签: c# xml serialization

我正在与第三方合作,该第三方拥有针对多个不同请求的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; }
}

1 个答案:

答案 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?以供参考。