Newtonsoft.Json.JsonSerializationException: 发生了

问题描述 投票:1回答:2

我正在使用休息服务但是当我对JSON字符串进行序列化时会抛出此异常吗?这个例外是什么意思?

public class Product
{
    public string PROD
    {
        get { return prod; }
        set { prod = value; }
    }

    //Department Number
    [JsonProperty("DPID")]
    public int DPID
    {
        get { return dpid; }
        set { dpid = value; }
    }

    //Sub Department Number
    [JsonProperty("SDID")]
    public int SDID
    {
        get { return sdid; }
        set { sdid = value; }
    }

    //Category Number
    [JsonProperty("CGID")]
    public int CGID
    {
        get { return cgid; }
        set { cgid = value; }
    }

    //Sub Category Number
    [JsonProperty("SCID")]
    public int SCID
    {
        get { return scid; }
        set { scid = value; }
    }

    //Product Description
    [JsonProperty("PDSC")]
    public string PDSC
    {
        get { return pdsc; }
        set { pdsc = value; }
    }

    //Product Brand
    [JsonProperty("PBRN")]
    public string PBRN
    {
        get { return pbrn; }
        set { pbrn = value; }
    }

    //Season Code
    [JsonProperty("SESN")]
    public string SESN
    {
        get { return sesn; }
        set { sesn = value; }
    }

    //Issue Quantity
    [JsonProperty("IQTY")]
    public string IQTY
    {
        get { return iqty; }
        set { iqty = value; }
    }

    //Currency Code
    [JsonProperty("CURR")]
    public string CURR
    {
        get { return curr; }
        set { curr = value; }
    }

    //Selling Price
    [JsonProperty("SELL")]
    public decimal SELL
    {
        get { return sell; }
        set { sell = value; }
    }

    //Product SKU Code
    [JsonProperty("PSKU")]
    public string PSKU
    {
        get { return psku; }
        set { psku = value; }
    }

    //Product Size
    [JsonProperty("PSZE")]
    public string PSZE
    {
        get { return psze; }
        set { psze = value; }
    }

    //Product Colour
    [JsonProperty("PCOL")]
    public string PCOL
    {
        get { return pcol; }
        set { pcol = value; }
    }

    //Pre-pack Code
    [JsonProperty("PPCD")]
    public string PPCD
    {
        get { return ppcd; }
        set { ppcd = value; }
    }

    //Image URL
    public string IURL
    {
        get { return iurl; }
        set { iurl = value; }
    }        

    [JsonProperty("DPDS")]
    public string DPDS
    {
        get { return dpds; }
        set { dpds = value; }
    }
}

消费者

这是我用来使用其余服务然后它给我发送一个JSON字符串,我将其序列化为一个名为products的Observable Collection类型的对象。

public ObservableCollection<Product> products = new ObservableCollection<Product>();

public async Task<ObservableCollection<Product>> GetProducts()
{
    try
    {
        string uri = url + "/product;
        _client.Timeout = TimeSpan.FromSeconds(300);

        HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, uri);
        var response2 = await _client.SendAsync(message);

        if (response2.IsSuccessStatusCode)
        {
            var content = await response2.Content.ReadAsStringAsync();
            var prodlist = JsonConvert.DeserializeObject<ObservableCollection<Product>>(content);
            products = prodlist;
            return products;
        }
        else if (response2.StatusCode == HttpStatusCode.NotFound)
        {
            return products;
        }

        return products;
    }
    catch (JsonException ex)
    {
        throw ex;
    }
}

JSON字符串

调用时,URI会返回此格式的大字符串。

{
  "PROD": "5510B-BK        ",
  "DPID": 0,
  "SDID": 0,
  "CGID": 0,
  "SCID": 0,
  "SPID": 0,
  "PDSC": "5510B BLACK BOAT SHOE                             ",
  "PBRN": "Footwear Direct",
  "SESN": "2018  ",
  "IQTY": "Pair           ",
  "CURR": "ZAR",
  "SELL": 0,
  "PSKU": "5510B-BK            ",
  "PSZE": "12      ",
  "PCOL": "BK                                 ",
  "PPCD": "A     ",
  "DPDS": "None                     "
}

The exception I get

异常消息

请注意,这就是拉动单个产品时所说的,但是当拉动所有对象时,同样的事情就会发生变化。

转换值“{”PROD“:”5510B-BK“,”DPID“:0,”SDID“:0,”CGID“:0,”SCID“:0,”SPID“:0,”PDSC“:” 5510B BLACK BOAT SHOE“,”PBRN“:”Footwear Direct“,”SESN“:”2018“,”IQTY“:”Pair“,”CURR“:”ZAR“,”SELL“:0.0000,”PSKU“:” 5510B-BK“,”PSZE“:”12“,”PCOL“:”BK“,”PPCD“:”A“,”DPDS“:”无“}”输入'WarehouseProMobile.Models.Product'。路径'',第1行,第427位。

解决了

原来我的其余API序列化为JSON,当对象通过网络发送时,Web服务器也序列化了我的对象,这使得字符串无用。通过将API调整为仅发送对象来解决此问题。

c# xamarin.forms observablecollection jsonconvert
2个回答
0
投票

这是你的POCO:

public class Product
{
    public string PROD { get; set; }

    //Department Number
    [JsonProperty("DPID")]
    public int DPID { get; set; }


    //Sub Department Number
    [JsonProperty("SDID")]
    public int SDID { get; set; }

    //Category Number
    [JsonProperty("CGID")]
    public int CGID { get; set; }

    //Sub Category Number
    [JsonProperty("SCID")]
    public int SCID { get; set; }

    //Product Description
    [JsonProperty("PDSC")]
    public string PDSC { get; set; }


    //Product Brand
    [JsonProperty("PBRN")]
    public string PBRN { get; set; }


    //Season Code
    [JsonProperty("SESN")]
    public string SESN { get; set; }

    //Issue Quantity
    [JsonProperty("IQTY")]
    public string IQTY { get; set; }


    //Currency Code
    [JsonProperty("CURR")]
    public string CURR { get; set; }

    //Selling Price
    [JsonProperty("SELL")]
    public decimal SELL { get; set; }

    //Product SKU Code
    [JsonProperty("PSKU")]
    public string PSKU { get; set; }

    //Product Size
    [JsonProperty("PSZE")]
    public string PSZE { get; set; }

    //Product Colour
    [JsonProperty("PCOL")]
    public string PCOL { get; set; }

    //Pre-pack Code
    [JsonProperty("PPCD")]
    public string PPCD { get; set; }
    //Image URL
    public string IURL { get; set; }

    [JsonProperty("DPDS")]
    public string DPDS { get; set; }
}

将您的操作方法修改为:

public async Task<ObservableCollection<Product>> GetProducts()
{
    try
    {
        string uri = url + "/product;
        _client.Timeout = TimeSpan.FromSeconds(300);

        HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, uri);
        var response2 = await _client.SendAsync(message);

        ObservableCollection<Product> products = new ObservableCollection<Product>();
        if (response2.IsSuccessStatusCode)
        {
            var content = await response2.Content.ReadAsStringAsync();
            Product product = JsonConvert.DeserializeObject<Product>(content);
            products.Add(product);
        }

        return products;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

0
投票

这就是我通常做的事情:

我创建了一个匹配JSON attrs的类(尝试在可能的情况下使用nullable):

public class Testingo
{

    public class Obj
    {
        public string PROD { get; set; }
        public int? DPID { get; set; }
        public int? SDID { get; set; }
        public int? CGID { get; set; }
        public int? SCID { get; set; }
        public int? SPID { get; set; }
        public string PDSC { get; set; }
        public string PBRN { get; set; }
        public string SESN { get; set; }
        public string IQTY { get; set; }
        public string CURR { get; set; }
        public int? SELL { get; set; }
        public string PSKU { get; set; }
        public string PSZE { get; set; }
        public string PCOL { get; set; }
        public string PPCD { get; set; }
        public string DPDS { get; set; }
    }

}

然后,我只想写:

var jsonisedObject = JsonConvert.DeserializeObject<List<Testingo.Obj>>(jsonStringHere);

jsonStringHere更改为包含实际JSON数据的字符串

您可以要求Visual Studio为您生成一个JSON就绪类。只需复制json数据然后在类中,单击Edit-> Paste Special-> Paste Json作为类!

© www.soinside.com 2019 - 2024. All rights reserved.