Xamarin iOS应用程序中的SignalR客户端从服务器检索数据,但缺少属性
本文关键字:数据 检索 属性 服务器 应用程序 iOS 客户端 SignalR Xamarin | 更新日期: 2023-09-27 18:19:35
抓紧,有很多移动的碎片。。。我有三个不同的应用程序:
服务器
Web
iOS(通过Xamarin)
我使用SignalR让两个客户端(web、ios)中的每一个都与服务器通信。网络与服务器进行完美的交互。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
我将跟踪级别设置为all,我可以看到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() { }