配列のシリアライズとデシリアライズのためのクラスを作成しようとしています。私が作成したクラスは、デシリアライズのために働いているようですが、配列をシリアル化しようとすると問題が発生します。私はかなり新しいC#開発者であり、コードから重要な部分を除外していると確信しています。以下はC#.NETのJSON.NET配列のシリアル化
私が作成したクラスのコピーです:
namespace PinnacleCartFormAPI
{
class clsGetCustomersResponse
{
public Customer Customer = new Customer();//{ get; set; }
}
public class Customer
{
public Int32 UserId;
public string UserName;
public CustBilling Billing = new CustBilling();
public AddressBook[] AddressBook;// AddressBook = new AddressBook();
}
public class CustBilling
{
public string FullName, FirstName, LastName, Email, Company, Phone;
public CustAddress Address = new CustAddress();
}
public class CustAddress
{
public string Name, Street1, Street2, City, State, Zip, Country;
}
public class AddressBook
{
public string Name, Street1, Street2, City, State, Zip, Country;
}
}
あなたが見ることができるように、アドレス帳クラスは配列にする必要があります。私の問題は、配列としてAddressBookクラスを正しく開始していないという事実に関連していると思います。
以下は、クラスの異なる要素に値を追加し、呼び出し元のコードのコピーである:私は太字の行を打つとすぐに
clsGetCustomersResponse GetCustomersResp = new clsGetCustomersResponse();
GetCustomersResp.Customer.UserId = 123456;
GetCustomersResp.Customer.UserName = "Username";
GetCustomersResp.Customer.Billing.FullName = "Full Name";
GetCustomersResp.Customer.Billing.FirstName = "First Name";
GetCustomersResp.Customer.Billing.LastName = "Last Name";
GetCustomersResp.Customer.Billing.Email = "[email protected]";
GetCustomersResp.Customer.Billing.Phone = "7778889999";
GetCustomersResp.Customer.Billing.Address.Name = "Address Name";
GetCustomersResp.Customer.Billing.Address.Street1 = "Address Street 1";
GetCustomersResp.Customer.Billing.Address.Street2 = "";
GetCustomersResp.Customer.Billing.Address.City = "Address City";
GetCustomersResp.Customer.Billing.Address.State = "Address State";
GetCustomersResp.Customer.Billing.Address.Zip = "Address Zip";
GetCustomersResp.Customer.Billing.Address.Country = "Address Country";
GetCustomersResp.Customer.AddressBook[0].Name = "Address Name";
GetCustomersResp.Customer.AddressBook[0].Street1 = "Address Street 1";
GetCustomersResp.Customer.AddressBook[0].Street2 = "";
GetCustomersResp.Customer.AddressBook[0].City = "Address City";
GetCustomersResp.Customer.AddressBook[0].State = "Address State";
GetCustomersResp.Customer.AddressBook[0].Zip = "Address Zip";
GetCustomersResp.Customer.AddressBook[0].Country = "Address Country";
、私は次のことを受け取りますエラー:
再び
「オブジェクト参照がオブジェクトのインスタンスに設定されていない」、私は裏切りますこれはコードのAddressBook部分を正しく初期化していないためです。しかし、私は配列でそれを行う方法が特定されていません。
私にこれに関するいくつかの方向を教えてください。
おかげで、
ザック
ジョン、 を私はエラーが発生しました: "暗黙のうちにタイプ 'System.Collections.Generic.List'をPinnacleCartFormAPI.AddressBookに変換できません。ここで間違っていることを説明していただけますか?私のクラスのAddressBookセクションを変更する必要がありますか? –
WebTech
@WebTech: 'Customer'クラスの' AddressBook' *プロパティ*を 'List'(あるいはおそらく 'IList ')に変更する必要があります。 –
ありがとうございました。あなたが提供したものを使用して、私が期待するようにすべてが機能します。 – WebTech