Проверьте, отличается ли значение ключа JSON от значения C# - PullRequest
1 голос
/ 03 марта 2020

У меня есть JSON вот так:

{ 
"content": {
      "shopCart": {
        "numberOfItem": "string",
        "shipCostsAmount": "string"
      },
      "items": {
        [
        {
          "itemQuantity": "1",
          "itemAmount": "200",
          "itemShelf": "string",
        },
        "item2": {
          "itemQuantity": "1",
          "itemAmount": "250",
          "itemShelf": "string",
        },
        "item3": {
          "itemQuantity": "1",
          "itemAmount": "3000",
          "itemShelf": "string",
        }
       ],
      }
   }
}

Я хочу проверить, что itemShelf отличается от Liquor, например, во всех трех пунктах.

Я могу сделать это для одного элемента, как это:

public bool CheckItemShelf(Content content)
{
     var itemShelf = content.Items.Item1.itemShelf;
     bool result;
     if ((itemShelf == "Liquor"))
        result = false;
     else
        result = true;
     return result;
}

Как я могу сделать это для трех (или более) элементов?

РЕДАКТИРОВАТЬ:

Вот класс Content:

  public class Content {
    /// <summary>
    /// Gets or Sets ShopCart
    /// </summary>
    [DataMember(Name="shopCart", EmitDefaultValue=false)]
    [JsonProperty(PropertyName = "shopCart")]
    public ShopCart ShopCart { get; set; }

    /// <summary>
    /// Gets or Sets Items
    /// </summary>
    [DataMember(Name="items", EmitDefaultValue=false)]
    [JsonProperty(PropertyName = "items")]
    public Items Items { get; set; }
}

EDIT 2:

Я изменил элементы и массив, как я могу проверить, что все значение itemShelf не ликер и есть верный или ложный ответ?

Ответы [ 3 ]

0 голосов
/ 03 марта 2020

Я предлагаю JS для преобразования item1, item2, item3 в элементы массива

let items = [];
for (var i = 1; i < 4; i++) {
    items.push(content.items['item' + i]);
}

Вы можете использовать LinQ в C#

bool anyLiquor = content.Items.Any(x => x.itemShelf == "Linquor");
0 голосов
/ 03 марта 2020

Я думаю, что это не очень чисто, но попробуйте это:

            var gameInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(data);
            var prop = gameInfo.Properties().Children().ToList()[0]["items"].ToArray();

            foreach (var item in prop)
            {
                if (item.Children().ToArray()[0]["itemShelf"].ToString() != "Liquor")
                    continue;
            }
0 голосов
/ 03 марта 2020

Как насчет использования Linq:

var ItemsThatAreNotLiqour = content.Items.Where(item => item.itemShelf != "Liquor");

Вашим классам должно понравиться это (думаю, это как-то изменит ваше json):

public class Item
{
    public string itemQuantity { get; set; }
    public string itemAmount { get; set; }
    public string itemShelf { get; set; }
}

public class Content
{
    public ShopCart shopCart { get; set; }
    public Item[] items { get; set; }
}
...