Json.Net反序列化字符串中的JSON字符串

时间:2017-05-23 10:43:33

标签: c# json string json.net

这听起来很简单。但是我找不到怎么做。

我从api收到了一个糟糕的json。实际的json在一个字符串

而不是

[{\"ProductId\":1,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000},{\"ProductId\":2,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000},{\"ProductId\":3,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000}]

我正在接收

"[{\"ProductId\":1,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000},{\"ProductId\":2,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000},{\"ProductId\":3,\"ProductName\":\"abuka\",\"Rate\":6.00,\"Quantity\":10.000}]"

当我尝试

JsonConvert.DeserializeObject<List<Product>> (jsonString)

我收到错误Error converting to System.Collections.Generic.List

如何在反序列化之前将其提取为有效的JSON字符串?

2 个答案:

答案 0 :(得分:4)

如果你有一个“串行化为JSON的字符串”的值,那么首先反序列化。假设你的字符串真正以双引号开头和结尾,你可以打电话给JsonConvert.DeserializeObject<string>进行解包:

using System;
using System.IO;
using Newtonsoft.Json;

public class Model
{
    public string Foo { get; set; }
}

public class Test
{
    static void Main()
    {
        string json = "\"{\\\"foo\\\": \\\"bar\\\"}\"";
        Console.WriteLine($"Original JSON: {json}");        
        string unwrappedJson = JsonConvert.DeserializeObject<string>(json);
        Console.WriteLine($"Unwrapped JSON: {unwrappedJson}");
        Model model = JsonConvert.DeserializeObject<Model>(unwrappedJson);
        Console.WriteLine($"model.Foo: {model.Foo}");
    }
}

答案 1 :(得分:1)

感谢Jon Skeet。参考你的答案,那些没有使用&#34; Newtonsoft.Json&#34;在应用程序中,但提供数据的Web API使用&#34; Newtonsoft.Json&#34;对于他们来说,一个人可能会有帮助。

示例:

在WEB API中 - &#34; Newtonsoft.Json&#34;使用

使用WEB API的应用程序(可能是MVC / ASP.NET WebForms),并没有使用&#34; Newtonsoft.Json&#34;。因此,他们可以参考&#34; System.Web.Extensions&#34;并使用using System.Web.Script.Serialization来淡化json数据。

using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace DesrializeJson1ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string jsonstring = "\"[{\\\"ProductId\\\":1,\\\"ProductName\\\":\\\"abuka\\\",\\\"Rate\\\":6.00,\\\"Quantity\\\":10.000},{\\\"ProductId\\\":2,\\\"ProductName\\\":\\\"abuka\\\",\\\"Rate\\\":6.00,\\\"Quantity\\\":10.000},{\\\"ProductId\\\":3,\\\"ProductName\\\":\\\"abuka\\\",\\\"Rate\\\":6.00,\\\"Quantity\\\":10.000}]\"";
            var serializer = new JavaScriptSerializer();
            var jsonObject = serializer.Deserialize<string>(jsonstring);
            List<Product> lstProducts = serializer.Deserialize<List<Product>>(jsonObject);
            foreach(var item in lstProducts)
            {
                Console.WriteLine("ProductId :" + item.ProductId);
                Console.WriteLine("ProductName :" + item.ProductName);
                Console.WriteLine("Rate :" + item.Rate);
                Console.WriteLine("Quantity :" + item.Quantity);
                Console.WriteLine("--------------------------");
            }
            Console.Read();
        }
    }
    public class Product
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public double Rate { get; set; }
        public double Quantity { get; set; }
    }

}

输出

enter image description here