C# 类设计:如何创建具有嵌套对象的类?
我目前正在使用Newegg提供的文档开发一个用于连接Newegg的客户端库,并且对类设计有疑问 在使用各种API(即NetSuite和Amazon的MWS)时,我遇到了如下使用的类:C# 类设计:如何创建具有嵌套对象的类?,c#,C#,我目前正在使用Newegg提供的文档开发一个用于连接Newegg的客户端库,并且对类设计有疑问 在使用各种API(即NetSuite和Amazon的MWS)时,我遇到了如下使用的类: recToFulfill.packageList = new ItemFulfillmentPackageList(); recToFulfill.packageList.package = new ItemFulfillmentPackage[ifitemlist.item.Length]; recToFu
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文档):
但是返回的XML响应将结果作为父节点,在我看来,它应该在类本身中表示。我会这么做吗
public UpdateOrderStatusInfo results {get; set;}
如果是这样,子节点去哪里
我需要说的是:
UpdateOrderStatusInfo updateInfo = new UpdateOrderStatusInfo();
if(updateInfo.IsSuccess.Equals("true")
{
Console.WriteLine(updateInfo.Results.OrderStatus);
}
对于从何处获取此信息的任何帮助或建议,我们将不胜感激 轻松的微风。如果它没有子对象,则它是标量属性。如果是,则它是自己的类,并相应地在父类中引用。如果它重复,它就是一个集合,并且像类一样被引用(这些是复杂类型,而不是原语)。确保在构造函数中初始化它们)
您需要将
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; }
}
简单的方法是使用xsd.exe工具 命令
xsd response.xml
将生成文件response.xsd
命令
xsd response.xsd/C
将生成文件response.cs
,其中包含对发布的xml进行序列化/反序列化所需的类。如果您有xml,使用XSD工具自动创建一个匹配的类。不幸的是,我没有XML本身——只有他们提供的XML snippits和Diagrams开发人员指南。如果您的示例没有讨论两个不同的东西,那么您的问题会更清楚。为什么称它们为“子节点”?是否嵌套,即订单状态中是否有订单状态;或者您只需要不止一个,如在public UpdateOrderStatusInfo[]results{get;set;}
(注意括号)返回的XML响应
表明您确实拥有一些XML。你能发布这个吗?感谢你给出了清晰的示例,并重写了你以前使用过的模棱两可的命名:)
UpdateOrderStatusInfo updateInfo = new UpdateOrderStatusInfo();
if(updateInfo.IsSuccess.Equals("true")
{
Console.WriteLine(updateInfo.Results.OrderStatus);
}
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; }
}
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; }
}