2012-07-10 40 views
0

我目前正在開發一個客戶端庫,用於使用Newegg提供的文檔連接到Newegg並對類設計有疑問。class design:如何創建一個嵌套對象的類?

在各種API的(即NetSuite和亞馬遜MWS)我遇到那些正在使用這樣的類工作:

recToFulfill.packageList = new ItemFulfillmentPackageList(); 
recToFulfill.packageList.package = new ItemFulfillmentPackage[ifitemlist.item.Length]; 
recToFulfill.packageList.package[i] = new ItemFulfillmentPackage(); 
recToFulfill.packageList.package[i].packageWeightSpecified = true; 
recToFulfill.packageList.package[i].packageTrackingNumber = "trackingNumber"; 

我的問題是:我如何正確設計嵌套對象像上面一樣?我以前從來不用擔心這個問題,所以我不確定在哪裏尋找或開始。

我需要找出位看起來像這樣(從所提供的API文檔截取):

<UpdateOrderStatusInfo> 
    <IsSuccess></IsSuccess> 
    <Result> 
     <OrderNumber></OrderNumber> 
     <SellerID></SellerID> 
     <OrderStatus></OrderStatus> 
    </Result> 
</UpdateOrderStatusInfo> 

所有字段是字符串類型,除了順序號是一個整數。

我有這個目前:

public class UpdateOrderStatusInfo 
{ 
    public string IsSuccess { get; set; } 
    public int OrderNumber { get; set; } 
    public string SellerID { get; set; } 
    public string OrderStatus { get; set; } 
} 

,但返回的XML響應有結果這對我來說似乎應該在類本身內表示父節點。我會這樣做嗎?

public UpdateOrderStatusInfo results {get; set;} 

如果是這樣,子節點在哪裏去?

我需要的是能夠說的是一樣的東西:從哪裏獲取這些信息表示讚賞

UpdateOrderStatusInfo updateInfo = new UpdateOrderStatusInfo(); 
if(updateInfo.IsSuccess.Equals("true") 
{ 
    Console.WriteLine(updateInfo.Results.OrderStatus); 
}  

任何幫助或建議。

+1

如果您有xml,請使用XSD工具自動創建匹配的類。 – asawyer 2012-07-10 18:45:32

+0

不幸的是,我沒有XML本身 - 只是他們提供的開發人員指南,它們提供了XML snippits和圖表 – 2012-07-10 18:46:09

+0

如果您的示例沒有談論兩種不同的東西,那麼您的問題會更清晰。你爲什麼稱他們爲「子節點」?它們是嵌套的,即訂單狀態中是否有訂單狀態;或者你只需​​要多於一個,就像'public UpdateOrderStatusInfo [] results {get;組; }(注意括號) – 2012-07-10 18:46:43

回答

0

您需要定義Result作爲一個單獨的類,叫做任何你想要的,然後再添加一個Result屬性作爲該類型。結果類可以在命名空間級別定義,或者,如果你是不可能在其他地方使用它自己的,你可以嵌套UpdateOrderStatusInfo類中的類定義:

public class UpdateOrderStatusInfo 
{ 
    public class UpdateOrderResult 
    { 
     public int OrderNumber { get; set; } 
     public string SellerID { get; set; } 
     public string OrderStatus { get; set; } 
    } 

    public UpdateOrderStatusInfo() 
    { 
     Result = new UpdateOrderResult(); 
    } 

    public string IsSuccess { get; set; } 
    public UpdateOrderResult Result { get; set; } 
} 
+0

感謝您的明確示例,並且爲了重寫您以前的模糊命名:) – 2012-07-10 19:01:13

1

輕鬆通風。如果它沒有孩子,這是一個標量屬性。如果是這樣,它是它自己的類,並相應地在父類中引用。如果重複,它是一個集合,並被引用像一個類(這些是複雜的類型,而不是原語)。確保你在構造函數中初始化它們)。

class Program 
{ 
    static void Main(string[] args) 
    { 
     var myOrder = new UpdateOrderStatusInfo(); 
     myOrder.IsSuccess = "true"; 
     myOrder.OrderResult.OrderNumber = 1001; 
     myOrder.OrderResult.OrderStatus = "Pending"; 
     myOrder.OrderResult.SellerID = "69"; 
    } 
} 

public class UpdateOrderStatusInfo 
{ 
    public string IsSuccess { get; set; } 
    public Result OrderResult { get; set; } 
    public UpdateOrderStatusInfo() 
    { 
     OrderResult = new Result(); 
    } 
} 

public class Result 
{ 
    public int OrderNumber { get; set; } 
    public string SellerID { get; set; } 
    public string OrderStatus { get; set; } 
} 
0

最簡單的方法是使用xsd.exe工具。

命令xsd response.xml將生成文件response.xsd 命令xsd response.xsd /C將生成包含所必需的類序列化/反序列化張貼的XML文件response.cs

相關問題