0

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

在使用各种 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 Response 将 Results 作为父节点,在我看来它应该在类本身中表示。我会这样做吗?

public UpdateOrderStatusInfo results {get; set;}

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

我需要的是能够说的是:

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

任何帮助或有关从何处获取此信息的建议表示赞赏。

4

3 回答 3

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; }
}
于 2012-07-10T18:51:50.273 回答
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; }
}
于 2012-07-10T18:54:03.317 回答
0

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

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

于 2012-07-10T18:58:57.267 回答