0

現在、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 ドキュメントから取得)。

<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 応答には結果が親ノードとして含まれており、クラス自体の中で表現する必要があるように思えます。私はこれをするだけですか?

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追加する必要があります。ResultResult クラスは名前空間レベルで定義できます。または、単独で他の場所で使用する可能性が低い場合は、クラス定義をクラス内にネストできます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 コマンドは、投稿された xml をシリアライズ/デシリアライズするために必要なクラスを含むxsd response.xsd /Cファイルを生成します。response.cs

于 2012-07-10T18:58:57.267 に答える