【问题标题】:Deserialize two element string in JSON反序列化 JSON 中的两个元素字符串
【发布时间】:2018-11-24 01:41:38
【问题描述】:

我有以下字符串,

[{ "AnimalName" : "Gatto", "Year" : 5.0 }, { "AnimalName" : "Gatto", "Year" : 6.0 }]

我想使用 Animali 类反序列化这个字符串

public class Animali
    {
        public string AnimalName { get; set; }
        public double Year { get; set; }
    }

我使用下面的代码,

Animali json = JsonConvert.DeserializeObject<Animali>(string);

我的问题是有两个单独的元素,我收到错误;

Newtonsoft.Json.JsonReaderException: '完成读取 JSON 内容后遇到的附加文本: ,.路径'',第 1 行,位置 40。'

反序列化字符串的正确方法是什么?有什么建议吗?

附:使用像[{ "AnimalName" : "Gatto", "Year" : 5.0 }] 这样的一个元素,代码可以正常工作。

【问题讨论】:

  • 您现在有多个动物,您应该期待Animali[]List&lt;Animali&gt;
  • 哦,好的。现在很清楚了。使用此代码,Json 可以正常工作List&lt;Animali&gt; jsonReal2 = JsonConvert.DeserializeObject &lt;List&lt;Animali&gt;&gt;(Encoding.ASCII.GetString(data)); 非常感谢@Xiaoy312!

标签: c# json json.net


【解决方案1】:

正如所指出的,你的 json 是一个数组,你需要这样反序列化它

var results = JsonConvert.DeserializeObject<List<Animali>>(string);

来自 json 站点的示例

Deserialize a Collection

【讨论】:

    【解决方案2】:
    1. 尝试将您的 json 字符串解析为 JToken。

    2. 将您的 JToken 投射到列表中。

    我在这里创建了一个控制台应用程序用于您的演示。

    class Program
    {
        static void Main(string[] args)
        {
            string json = @"[{ 'AnimalName' : 'Gatto', 'Year' : 5.0 }, { 'AnimalName' : 'Gatto', 'Year' : 6.0 }]";
    
            JToken jToken = JToken.Parse(json);                         //Point No. 1
            List<Animali> animalis = jToken.ToObject<List<Animali>>();  //Point No. 2
    
            foreach (Animali animali in animalis)  //Print result
            {
                Console.WriteLine("AnimalName: " + animali.AnimalName + "\t Year: " + animali.Year);
            }
    
            Console.ReadLine();
        }
    }
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      相关资源
      最近更新 更多