【问题标题】:Deserialize array of objects to c# class returns null in Xamarin.Forms App将对象数组反序列化为 C# 类在 Xamarin.Forms App 中返回 null
【发布时间】:2018-02-22 12:58:38
【问题描述】:

我的应用中有这个类:

public class Control
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ControlDescription { get; set; }
    public string ControlExceptionText { get; set; }
    public string Color { get; set; }
    public double DataRetrieving_Frequency { get; set; }
    public double delay_Factor { get; set; }
    public Boolean Disabled { get; set; }
}

我的 json 字符串是:

var result = 
"[
{\"id\":16,\"name\":\"trest\",\"controlDescription\":null,\"controlExceptionText\":null,\"color\":\"#abdb2c\",\"dataRetrieving_Frequency\":0.0,\"delay_Factor\":0.0,\"disabled\":false},
{\"id\":15,\"name\":\"test\",\"controlDescription\":null,\"controlExceptionText\":null,\"color\":\"#441fed\",\"dataRetrieving_Frequency\":1440.0,\"delay_Factor\":10.0,\"disabled\":false},
{\"id\":14,\"name\":\"Powershell\",\"controlDescription\":\"text. \",\"controlExceptionText\":\"exception.\",\"color\":\"#ad89d7\",\"dataRetrieving_Frequency\":1440.0,\"delay_Factor\":10.0,\"disabled\":false}
]"

我想反序列化这个 json 以适应我的Control class。所以我这样做是为了转换我的 Deserializeobject:

List<Control> test = JsonConvert.DeserializeObject<List<Control>>(result);

问题是test 返回null

有什么想法吗?!

更新:

  • 此代码在我的其他应用程序中运行良好,但在 Xamarin.Form 应用程序中无法正常运行。
  • 还尝试将@ 附加到 JSON 字符串的开头,但出现此错误

解析值@时遇到意外字符。

更新:

我正在使用 Xamarin Live Player 审查我的应用程序,也许问题与此有关,因为许多开发人员在使用 Live Player 时抱怨序列化和反序列化错误。

【问题讨论】:

  • 对我来说很好用。
  • Control 是 System.Web.UI 命名空间中的一个类。如果您在代码中包含该命名空间,则必须在 Control 类之前指定命名空间,例如列出
  • 你确定是朋友? prnt.sc/iia1m0
  • 使用完全相同的代码,我得到了结果。所以问题出在其他地方,你还没有提供。这是一个网络项目吗?您确定字符串格式正确吗?您可以尝试将@ 添加到"[ 行并Ctrl + H'ing \"s 到""s 吗?因为这是我所做的唯一区别,所以您的示例不是有效字符串。
  • @SaadAli 您发布的用于分配给result 的文字代码不应编译,除非您将其设为一行。

标签: c# list json-deserialization


【解决方案1】:

您的 json 字符串不正确。

JSON 数据以名称/值对形式写入。

名称/值对由字段名称(双引号)组成, 后跟一个冒号,后跟一个值:"name":"John"

从您的 json 字符串中删除反斜杠。以后你可以检查你的json字符串的正确性here

【讨论】:

  • 反斜杠用于分隔双引号,因为 OP 将 json 显示为文字 C# 字符串赋值。
【解决方案2】:

反序列化使用这种字符串格式:

所以回答你的问题:你需要一个有效的 JSON 字符串来进行反序列化。以@ 开头,并将所有\" 替换为双引号。

更新编辑:@ 符号应该在字符串之外,它不是 JSON 字符串的一部分,它只是表明您的字符串将是多行的。

【讨论】:

    【解决方案3】:

    这对我来说很好。这是迄今为止我尝试过的另一个没有反序列化的示例。 我收到一个 JSON 文件的响应。我的 JSON 看起来像这样。

    ..我这样做是为了从 JSON 中获取每个元素。我已将这些元素放入猴子列表中。

    using (JsonDocument document = JsonDocument.Parse(response, options))
                {
                    Grid grid = new Grid();
                    Monkeys = new List<Monkey>();
                    foreach (JsonElement element in document.RootElement.EnumerateArray())
                    {
                        if (element.TryGetProperty("id", out JsonElement id)&&(element.TryGetProperty("end", out JsonElement end) )
                            && (element.TryGetProperty("time", out JsonElement time) && (element.TryGetProperty("description", out JsonElement description)
                            && (element.TryGetProperty("start", out JsonElement start) && (element.TryGetProperty("date", out JsonElement date))))))
                        {    
                            Monkeys.Add(new Monkey
                            {
                                Time=time.ToString(),
                                Start = start.ToString(),
                                End =end.ToString(),
                                Description = description.ToString()
                            });
                            BindingContext = this;
                        }
                    }
                }
    

    这是我的猴子课

    public class Monkey
        {
            public string Time { get; set; }
            public string Start { get; set; }
            public string End { get; set; }
            public string Description { get; set; }
            public string ImageUrl { get; set; }
    
            public override string ToString()
            {
                return Start;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2018-02-04
      相关资源
      最近更新 更多