2014-03-07 52 views
0

我的任務是編寫一個序列化要傳入和傳出xml API的數據的庫。我以前從來沒有使用過這種技術,並且正在努力一點點。所有的請求都有很多重複的字段,所以我們正在考慮使用派生類來處理這個問題。該XML看起來這API的XML序列化

<request> 
    <UserId></UserId> 
    <AccountId></AccountId> 
    <Token></Token> 
    <Method> 
     <methodName></methodName> 
     <Id></Id> 
     <Date></Date> 
    </Method> 
</request> 

我們想然後用這樣的

public class Request 
{ 
    [XmlElement("token")] 
    public string token { get; set; } 
    [XmlElement("userId")] 
    public int userId { get; set; } 
    [XmlElement("accountId")] 
    public int accountId { get; set; } 

} 

然後

public class Method : Request 
{ 
    [XmlElement("methodName")] 
    public string methodName { get; set; }   
    [XmlElement("Id")] 
    public int Id { get; set; } 
    [XmlElement("Date")] 
    public string Date { get; set; } 
} 

我能得到這個使用序列化沒有問題XmlSerializer s = new XmlSerializer(typeof(Method));
但它的不嵌套繼承類,我可以找出/如何添加xmlElement(「方法」)。 有人可以幫助我正確創建類嗎?

編輯 我可以使這項工作很好,如果我從方法去除繼承和包括方法,類請求 - 然而,隨着不同的調用的許多的人,我們都會有,我想使這個漂亮可重用的代碼

+0

看看類似的問題在這裏:http://stackoverflow.com/questions/9737363/serialize-nested-classes-in-c – Baahubali

+0

爲什麼要額外的「方法」元素?你的「方法」是一個「請求」。該XML應該是'​​' –

+0

此外,你可能會發現更容易跳過XML序列化,只是使用LINQ到XML。 –

回答

0

這是我如何得到它的工作。它在我最初的問題中輸出如上所述的xml。我確實學到了一些有趣的東西,比如不需要[serializable],並且不需要設置[XmlElement],除非我需要與我的屬性不同的東西。

public class Headers 
    { 
     public string Token { get; set; } 
     public int UserId { get; set; } 
     public int AccountId { get; set; } 
     [XmlIgnore] 
     public Uri host { get; set; } 
     public static string requestMethod = "POST"; 
    } 
[XmlRoot("request")] 
public class GetActivityDetailsByActivityId : Headers 
    { 
     public string responseType = "ResponseGetActivityDetailsByActivityId"; 
     public class MethodDetails 
     { 
      public string methodName = "GetActivityDetailsByActivityId"; 
      public int activtyId; 
      public DateTime activityDate; 

     } 
     [XmlElement("Method")] 
     public MethodDetails Method = new MethodDetails(); 

     public GetActivityDetailsByActivityId(int activityId, DateTime activityDate,Headers headers) 
     { 
      this.Method.activityDate = activityDate; 
      this.Method.activtyId = activityId; 

      this.AccountId = headers.AccountId; 
      this.Token = headers.Token; 
      this.UserId = headers.UserId; 
      this.host = headers.host; 

     } 
     GetActivityDetailsByActivityId() 
     { 
     } 
    } 
2

你需要這個階級結構嵌套一個Method對象:

public class Request 
{ 
    [XmlElement("token")] 
    public string token { get; set; } 
    [XmlElement("userId")] 
    public int userId { get; set; } 
    [XmlElement("accountId")] 
    public int accountId { get; set; } 
    [XmlElement("method")] 
    public Method method { get; set; } 
} 
public class Method 
{ 
    [XmlElement("methodName")] 
    public string methodName { get; set; } 
    [XmlElement("Id")] 
    public int Id { get; set; } 
    [XmlElement("Date")] 
    public string Date { get; set; } 
} 

如果你在XML反覆Method對象的列表,改變這一行

public Method method { get; set; } 

public List<Method> method { get; set; } 
+0

我把這作爲它的好信息upvoting。我有一個適當的解決方案,當我接近它時,我會提出。 –

+0

謝謝。我期待看到您的解決方案。 –