在c#中将字符串转换为Json

时间:2016-06-05 03:25:42

标签: c# json asp.net-web-api javascriptserializer

我想将字符串转换为json,但我得到的只是null或错误

例如,我想转换此字符串:

string json =
                "{\"$id\":\"1\",\"Result\":{\"$id\":\"2\",\"ListRate\":[{\"$id\":\"3\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":0.0},{\"$id\":\"4\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":0.0},{\"$id\":\"5\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":0.0}],\"MyRate\":[{\"$id\":\"6\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":1.5},{\"$id\":\"7\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":2.0},{\"$id\":\"8\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":2.0}],\"ListRated\":[{\"$id\":\"9\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":30.0,\"theCount\":1,\"theSum\":1.5},{\"$id\":\"10\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":40.0,\"theCount\":1,\"theSum\":2.0},{\"$id\":\"11\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":40.0,\"theCount\":1,\"theSum\":2.0}]},\"StatusCode\":\"Created\",\"Description\":null}";
  JavaScriptSerializer serializer = new JavaScriptSerializer();
  var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<ProductDto>(json);

和产品类别:

public class RootObject
{
        public string id { get; set; }
        public ProductDto Result { get; set; }
    public string StatusCode { get; set; }
    public object Description { get; set; }
}

 public class ProductDto
    {

        public string id { get; set; }
        public IQueryable<MyRateDto> ListRate { get; set; }

        public IQueryable<MyRateDto> MyRate { get; set; }

        public IQueryable<ShoppingRateDto> ListRated { get; set; }
    }

    public class ShoppingRateDto
    {
        public string id { get; set; }
        public string Title { get; set; }

        public long ShoppingRateId { get; set; }

        public double Rate { get; set; }

        public int theCount { get; set; }

        public double theSum { get; set; }
    }

    public class MyRateDto
    {
        public string id { get; set; }
        public string Title { get; set; }

        public long ShoppingRateId { get; set; }

        public double Rate { get; set; }
    }

我有点困惑,应该如何转换它。 我也使用&#34; RootObject&#34;而不是&#34; ProductDto&#34;,但没有改变......

一些错误:

  

附加信息:最佳重载方法匹配   &#39; Newtonsoft.Json.JsonConvert.DeserializeObject(字符串)&#39;   有一些无效的论点

     

其他信息:无法创建和填充列表类型   System.Linq.IQueryable`1 [Site.Model.MyRateDto]。路径&#39; Result.ListRate&#39;

1 个答案:

答案 0 :(得分:2)

似乎错误是一个体面的提示。而不是使用IQueryable(基本上任何接口集合),尝试使用具体集合。例如List<T>

序列化程序必须使用具体类才能通过反射实例化它们。当他们读取类定义并且遇到接口时,序列化器很少能在正确的实现上做出选择。由于可能存在许多不同集合接口的具体实例,因此您应该为序列化程序提供具体类型以便正常工作。