我目前正在开发一个客户端库,使用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将结果作为父节点,对我来说似乎应该在类本身内表示。我会这样做吗?
public UpdateOrderStatusInfo results {get; set;}
如果是这样,子节点在哪里?
我需要的是能够说出类似的东西:
UpdateOrderStatusInfo updateInfo = new UpdateOrderStatusInfo();
if(updateInfo.IsSuccess.Equals("true")
{
Console.WriteLine(updateInfo.Results.OrderStatus);
}
对于获取此信息的任何帮助或建议表示赞赏。
答案 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所需的类。