Json.Net 在 Xamarin 中不起作用

Json.Net doesn't work in Xamarin

我在 Xamarin 类型的解决方案中有此代码

public async Task<Response> GetList<Publication>(string urlBase, string servicePrefix, string controller)
{
    try
    {
        var client = new HttpClient();
        client.BaseAddress = new Uri(urlBase);
        var url = string.Format("{0}{1}", servicePrefix, controller);
        var response = await client.GetAsync(url);
        var result = await response.Content.ReadAsStringAsync();

        if (!response.IsSuccessStatusCode)
        {
            return new Response
            {
                IsSuccess = false,
                Message = result,
            };
        }

        var list = JsonConvert.DeserializeObject<List<Publication>>(result);
        return new Response
        {
            IsSuccess = true,
            Message = "Ok",
            Result = list,
        };
    }
    catch (Exception ex)
    {
        return new Response
        {
            IsSuccess = false,
            Message = ex.Message,
        };
    }
}

当我调试它时,JsonConvert.DeserializeObject<List<Publication>>(result); 不起作用,return null...

在 XAMARIN 中调试

我确定结果不为空

但是如果我 运行 在控制台类型的解决方案中使用相同的代码,它就可以工作!!!

我正在使用相同的 class,这是我的出版物 class

public class Publication
{
    public int IdPublicacion { get; set; }
    public string UrlVideo { get; set; }
    public object UrlImagen { get; set; }
    public string Text { get; set; }
    public string Titulo { get; set; }
    public DateTime Fecha { get; set; }
    public string Sacerdote { get; set; }
}

还有我的 Json 代码

[
{
    "IdPublicacion": 1,
    "UrlVideo": "https://www.youtube.com/watch?v=mQR0bXO_yI8",
    "UrlImagen": null,
    "Text": "Para fomentar la lectura en los niños es recomendable empezar con cuentos infantiles cortos que traten de aventuras divertidas y que capten la atención de los niños. De esta forma, los niños se divertirán a la vez que empiezan a cogerle el gusto a la lectura.\r\n \r\nLos relatos cortos con son los mejores para empezar a leer con los niños. Aunque hay multitud de cuentos tradicionales que son esenciales y que todo niño debería conocer, ya que han ido pasando de generación en generación.\r\n\r\nEn pequelandia.org se han seleccionado una serie de cuentos infantiles cortos para leer con niños. Son relatos cortos para hacer de la lectura un momento agradable y divertido, de forma que los niños empiecen a familiarizarse con la lectura y los libros.",
    "Titulo": "Fly me to the moon",
    "Fecha": "2018-03-07T00:00:00",
    "Sacerdote": "Julian"
},
{
    "IdPublicacion": 2,
    "UrlVideo": "https://www.youtube.com/watch?v=mQR0bXO_yI8",
    "UrlImagen": null,
    "Text": "Para fomentar la lectura en los niños es recomendable empezar con cuentos infantiles cortos que traten de aventuras divertidas y que capten la atención de los niños. De esta forma, los niños se divertirán a la vez que empiezan a cogerle el gusto a la lectura.\r\n \r\nLos relatos cortos con son los mejores para empezar a leer con los niños. Aunque hay multitud de cuentos tradicionales que son esenciales y que todo niño debería conocer, ya que han ido pasando de generación en generación.",
    "Titulo": "Titulo 2",
    "Fecha": "2018-03-06T00:00:00",
    "Sacerdote": "Julian"
}]

附加信息,当我看到列表时,显示一条消息

"Unable to cast object of type 'System.RuntimeType' to type 'Mono.Debugger.Soft.TypeMirror'."

终于有我的 GitHub 项目 https://github.com/solartes/VesApp

尝试将 Preserve 属性添加到 Publication class:

[Preserve(AllMembers = true)]
public class Publication

构建时可能会删除 class 的属性,因此它们会丢失且无法反序列化。

我发现在您的 Debug 中您没有指定要将 json 反序列化为 List< T > 的类型。但是,在有效的测试中,您确实指定需要一个 Publications 列表返回 "List< Publication >" .

已解决。

问题是什么? JSON.NET Xamarin Live Player 有问题,所以如果你在 Xamarin Live Player 中播放它不起作用,你必须 运行 在 Android 模拟器中播放它。