簡體   English   中英

API的XML序列化

[英]XML Serialization for 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));來序列化沒問題XmlSerializer s = new XmlSerializer(typeof(Method));
但它沒有嵌套繼承的類,我可以弄清楚如何/在哪里可以添加xmlElement(“方法”)。 有人可以幫我正確創建類嗎?

編輯我可以使這個工作正常,如果我從方法中刪除繼承並包括方法作為請求的類 - 但是,由於我們將擁有大量不同的調用,我試圖使這成為一個很好的可重用代碼片段

您需要此類結構來嵌套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; }

這就是我如何運作的方式。 它在我的初始問題中輸出如上所述的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()
        {
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM