这听起来很简单。但是我找不到怎么做。
我从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字符串?
答案 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; }
}
}
输出