3

これは、これに対するフォローアップの質問です。解析方法を尋ねたところ、答えが得られました。そうは言っても、まだうまくいきませんが、答えが不十分なためではないでしょう。

不正行為をデバッグしたいのですが、率直に言って方法がわかりません。

これは私の逆シリアル化コードです。

DataContractJsonSerializer serializer 
  = new DataContractJsonSerializer(typeof(Customer));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(textToParse));
Envelope customer = (Customer)serializer.ReadObject(stream);

return "Status = " + customer.Status + " and guid = " + customer.Guid

これは私が使用するデータ コントラクトです。

[DataContract]
public class Customer
{
  [DataMember(Name = "Status")]
  public int Status;

  [DataMember(Name = "CustomerId")]
  public String Guid;

  [DataMember(Name = "Information")]
  public Object Info;
}

これは、解析されるテキストのヘッドです。

{"CustomerStatuses":[{
  "Information":[{"Guid":"1","Role":"Customer"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"4"},
  "Information":[{"Guid":"5","Role":"Customer"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"6"},
  "Information":[{"Guid":"7","Role":"Seller"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"6"},
  ...

問題は、プロパティStatusが 0 として出力され、Guidが null または空の文字列として出力されることです。私は彼らを殴っていません。ここで何が間違っている可能性があり、どうすればデバッグできますか?

4

1 に答える 1

0

いわば、間違ったセクションをターゲットにしているか、間違ったタグを鳴らしています。それがルートオブジェクトであるため、 Customer ではなくCustomerStatuses解析しようとするべきではありません。もう 1 つのクラス必要になります。うまくいけば、あなたの顧客はそれを受け入れます。

データ コントラクトのコードは次のとおりです。必要なように見えるので、フィールドInfoを含めましたが、仕様に従って省略してもかまいません。

[DataContract]  
public class CustomerStatuses
{
  [DataMember(Name = "CustomerStatuses")]
  public IEnumerate<Customer> Customers;
}

[DataContract]
public class Customer
{
  [DataMember(Name = "Status")]
  public int Status;

  [DataMember(Name = "CustomerId")]
  public String Guid;

  [DataMember(Name = "Information")]
  public Object Info;
}

次に、このコードでアクセスします。

DataContractJsonSerializer serializer 
  = new DataContractJsonSerializer(typeof(CustomerStatuses));
MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(jsonText));
CustomerStatuses parser = (CustomerStatuses)serializer.ReadObject(stream);

String guid = parser.DocumentStatuses.FirstOrDefault().Guid;
int status = parser.DocumentStatuses.FirstOrDefault().Status;

そして、これは間違いなく明日の私のブログに行きます!

于 2013-02-08T23:25:52.727 に答える