1

JSON をオブジェクトに変換するときにエラーが発生します。Fiddler を介して JSON を取得できるので、Web API に問題はないと思います。

これは私が持っているエラーです:

{"現在の JSON オブジェクト (例: {\"name\":\"value\"}) を型 'System.Collections.Generic.List`1[MvcMobile.WebAPI.Model.Person]' にデシリアライズできません。 \r\nこのエラーを修正するには、JSON を JSON 配列 ([1,2,3] など) に変更するか、逆シリアル化された型を変更して、 JSON オブジェクトから逆シリアル化できる通常の .NET 型 (たとえば、整数のようなプリミティブ型ではなく、配列やリストのようなコレクション型ではない) JsonObjectAttribute を型に追加して、JSON から逆シリアル化することもできますobject.\r\nPath 'BusinessEntityID'、行 1、位置 30."}

これはJSONです:

{"$id":"1", "BusinessEntityID":1,"PersonType":"EM","NameStyle":false,"Title":null,
"FirstName":"Ken", "MiddleName":"J","LastName":"Sánchez","Suffix":null,
"EmailPromotion":0,"AdditionalContactInfo":null,"Demographics":"0",
"rowguid":"92c4279f-1207-48a3-8448-4636514eb7e2",
"ModifiedDate":"2003-02-    08T00:00:00","Employee":null}

そして、これはコードです:

HttpResponseMessage resp = client.GetAsync("http://localhost:8080/api/person/GetPerson/" + id).Result;
resp.EnsureSuccessStatusCode();

var result = resp.Content.ReadAsAsync<IEnumerable<Person>>().Result;

Entity Framework では、次の 2 つのオプションを設定しました。

this.Configuration.LazyLoadingEnabled = false; 
this.Configuration.ProxyCreationEnabled = false;

JSON に問題があるのは、1 つのエンティティしか返されないためでしょうか? または、[]{} が欠落しているものはありますか? それとも、JSON からオブジェクトに移行するためのより良い方法でしょうか?

4

3 に答える 3

1

その理由は、/api/person/GetPerson/1 を呼び出しているためです (つまり、単一の結果を期待しています)。

/api/person/all を呼び出す場合は、複数の結果が予想されるため、IEnumerable を使用します。

また、URI の GetPerson 部分を削除する価値があるかもしれません。これは REST であるため、api/person/id で十分な情報です。

于 2012-09-17T14:57:04.660 に答える
0

コードをに変更したところ、うまくいきました。

var result = resp.Content.ReadAsAsync<Person>().Result;
于 2012-09-20T10:09:49.820 に答える
0

エラーメッセージはかなり説明的であるように思われます。逆シリアル化しようとしているクラスは、配列を期待しています。JSON は単なるオブジェクトです。角括弧を配置して、単一項目の配列にすることができます。

このようなもの:

[{"$id":"1", "BusinessEntityID":1,"PersonType":"EM","NameStyle":false,"Title":null,
"FirstName":"Ken", "MiddleName":"J","LastName":"Sánchez","Suffix":null,
"EmailPromotion":0,"AdditionalContactInfo":null,"Demographics":"0",
"rowguid":"92c4279f-1207-48a3-8448-4636514eb7e2",
"ModifiedDate":"2003-02-    08T00:00:00","Employee":null}]
于 2012-09-17T14:56:59.323 に答える