C# 类设计:如何创建具有嵌套对象的类?

C# 类设计:如何创建具有嵌套对象的类?,c#,C#,我目前正在使用Newegg提供的文档开发一个用于连接Newegg的客户端库,并且对类设计有疑问 在使用各种API(即NetSuite和Amazon的MWS)时,我遇到了如下使用的类: recToFulfill.packageList = new ItemFulfillmentPackageList(); recToFulfill.packageList.package = new ItemFulfillmentPackage[ifitemlist.item.Length]; recToFu

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

在使用各种API(即NetSuite和Amazon的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文档):

但是返回的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; }
}