类设计:如何使用嵌套对象创建类?

时间:2012-07-10 18:40:23

标签: c#

我目前正在开发一个客户端库,使用Newegg提供的文档连接到Newegg,并对类设计有疑问。

在使用各种AP​​I(即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 Response将结果作为父节点,对我来说似乎应该在类本身内表示。我会这样做吗?

public UpdateOrderStatusInfo results {get; set;}

如果是这样,子节点在哪里?

我需要的是能够说出类似的东西:

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

对于获取此信息的任何帮助或建议表示赞赏。

3 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:0)

您需要将Result定义为单独的类,调用您想要的任何内容,然后添加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; }
}

答案 2 :(得分:0)

简单的方法是使用xsd.exe工具。

命令xsd response.xml将生成文件response.xsd 命令xsd response.xsd /C将生成文件response.cs,其中包含序列化/反序列化xml所需的类。