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方面的这种情况?

Xamarin iOS应用程序中的SignalR客户端从服务器检索数据,但缺少属性

这里的问题是Response没有无参数构造函数,实际上是:

public Response(IList<Person> people)
{
    People = people;
}

Newtonsoft(Json.NET)或SignalR几乎都得到了正确的反序列化,但它的一些特性搞砸了Person的一些属性。。。不知道这是怎么回事,但添加一个无参数构造函数修复了一切。

public Response() { }