ちょっと待ってください、これにはたくさんの動く部分があります...私は3つの異なるアプリを持っています:
サーバ
ウェブ
iOS(Xamarin経由)
SignalRを使用して、2つのクライアント(Web、iOS)のそれぞれをサーバーと通信させています。Webはサーバーと完全にやり取りします。iOSアプリも通信しますが、オブジェクトのプロパティが常に欠落しています。
問題エンティティ:(名前は完全に返され、IDとステータスはそれぞれ0とnullとして返されます)
public class Person
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("status")]
public string Status { get; set; }
}
応答:
public class Response
{
[JsonProperty("people")]
public IList<Person> People { get; set; }
}
ハブ方式:
public Response GetPlayers()
{
return new Response
{
People = new List<Person>
{
new Person { Id = 1, Name = "Person 1", Status = "In" },
new Person { Id = 2, Name = "Person 2", Status = "Out" },
new Person { Id = 3, Name = "Person 3", Status = "In" }
}
};
}
Xamarin iOSアプリ:
await Hub.Start();
var peopleHubProxy = Hub.CreateHubProxy("PeopleHub");
Response response = await peopleHubProxy.Invoke<Response>("GetPlayers");
Console.WriteLine(response.People.Count); // Correct, returns 3
Console.WriteLine(response.People[0].Name); // Correct, returns "Person 1"
Console.WriteLine(response.People[0].Id); // INCORRECT, returns 0
Console.WriteLine(response.People[0].Status); // INCORRECT, returns null
// Same goes for people 2 and 3
トレースレベルをすべてに変更すると、JSONが期待どおりに通過していることがわかります。
OnMessage({"R":{"people":[{"id":1,"name":"Person 1","status":"In"},{"id":2,"name":"Person 2","status":"Out"},{"id":3,"name":"Person 3","status":"In"}]},"I":"0"})
Webアプリケーションでは、これらのプロパティは問題なく実行されているため、問題はサーバー側ではないことがわかります。iOS / Xamarin側でこれを引き起こしている可能性があるのは何ですか?
ここでの問題Response
は、パラメーターのないコンストラクターがないことが判明しました。実際には次のようなものでした。
public Response(IList<Person> people)
{
People = people;
}
Newtonsoft(Json.NET)またはSignalRのいずれかが、とにかく正しい逆シリアル化をほぼ取得しましたが、それに関する何かがいくつかのPerson
プロパティを台無しにしました...それがどのようになり得るかはわかりませんが、パラメーターなしのコンストラクターを追加するとすべてが修正されました。
public Response() { }
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加