десериализация json.net возвращает ноль - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь десериализовать строку JSON в объект C #.Когда я отлавливаю отладчик, визуализатор JSON, кажется, отлично разбирает строку.Однако, когда я нажимаю строку через следующий код, возвращаемый объект имеет нулевые значения для свойств.

Вот мой код:

    public static Item GetPrices(string itemStr)
    {
        Item item = JsonConvert.DeserializeObject<Item>(itemStr);
        return item;
    }

    public class Item
    {
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }

        [JsonProperty(PropertyName = "prices")]
        public Prices Prices { get; set; }
    }

    public class Prices
    {
        [JsonProperty(PropertyName = "priceUofM")]
        public PriceUofM[] PriceUofMs { get; set; }
    }

    public class PriceUofM
    {
        [JsonProperty(PropertyName = "uofm")]
        public string UofM { get; set; }

        [JsonProperty(PropertyName = "price")]
        public string Price { get; set; }
    }

и вот что я передаю ему:

{
    "item": {
        "id": "1A50CC070S",
        "prices": 
        [
            {
                "priceUofM": {
                    "uofm": "BOX",
                    "price": "$81.11"
                }
            },
            {
                "priceUofM": {
                    "uofm": "CASE",
                    "price": "$811.11"
                }
            }
        ]
    }
}

Я запустил его через несколько онлайн-анализаторов, и все они, кажется, прекрасно интерпретируют строку JSON.Что я делаю неправильно при форматировании строки, чтобы вызвать сбой JsonConvert.DeserializeObject?

1 Ответ

0 голосов
/ 06 октября 2018

Учитывая, что json:

{
    "item": {
        "id": "1A50CC070S",
        "prices": 
        [
            {
                "priceUofM": {
                    "uofm": "BOX",
                    "price": "$81.11"
                }
            },
            {
                "priceUofM": {
                    "uofm": "CASE",
                    "price": "$811.11"
                }
            }
        ]
    }
}

C # модель будет:

public class Model
{
    [JsonProperty("item")]
    public Item Item { get; set; }
}

public class Item
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("prices")]
    public List<Price> Prices { get; set; }
}

public class Price
{
    [JsonProperty("priceUofM")]
    public PriceUofM PriceUofM { get; set; }
}

public class PriceUofM
{
    [JsonProperty("uofm")]
    public string UofM { get; set; }

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

Для десериализации строки в объект Item строка JSON будет выглядеть примерно так:

{
    "id": "1A50CC070S",
    "prices": 
    [
        {
            "priceUofM": {
                "uofm": "BOX",
                "price": "$81.11"
            }
        },
        {
            "priceUofM": {
                "uofm": "CASE",
                "price": "$811.11"
            }
        }
    ]
}
...