Я действительно новичок в программировании на языке C #, и у меня есть строка JSON:

{
  "Type": "Name",
  "parameters": [
    {
      "A": {
        "type": "string",
        "defaultValue": "key"
      },
      "B": {
        "type": "string",
        "defaultValue": "key"
      },
      "C": {
        "type": "string",
        "defaultValue": "key"
      },
      "D": {
        "type": "string",
        "defaultValue": "autogenerated"
      },
      "E": {
        "type": "string",
        "defaultValue": "autogenerated"
      },
      "F": {
        "type": "dropdown",
        "dropDownItems": [
          "true",
          "false"
        ],
        "defaultValue": "false"
      }
    }
  ]
}

И я хочу вывести параметры массива JSON, но без "A", "B" и "C". Этот JSON-файл всегда меняется, но в нем всегда есть «A», «B» и «C».

2
art-a-game 3 Май 2019 в 15:25

4 ответа

Лучший ответ

Среди с ответом Тьерри Прост

namespace Testedouble
{
class Program
{
    static void Main(string[] args)
    {
        var jsonString = @"{
      'Type': 'Name',
     'parameters': [
     {
  'A': {
    'type': 'string',
    'defaultValue': 'key'
  },
  'B': {
    'type': 'string',
    'defaultValue': 'key'
  },
  'C': {
    'type': 'string',
    'defaultValue': 'key'
  },
  'D': {
    'type': 'string',
    'defaultValue': 'autogenerated'
  },
  'E': {
    'type': 'string',
    'defaultValue': 'autogenerated'
  },
  'F': {
    'type': 'dropdown',
    'dropDownItems': [
      'true',
      'false'
        ],
      'defaultValue': 'false'
       }
     }
   ]
 }";

        var values = JsonConvert.DeserializeObject<Foo>(jsonString);
        foreach (var key in new string[] { "A", "B", "C" })
        {
            foreach (var item in values.Parameters)
            {
                item.Remove(key);
            }

        }
        Console.WriteLine(JsonConvert.SerializeObject(values));


    }

    public class Foo
    {
        public string Type { get; set; }
        public List<Dictionary<string, object>> Parameters { get; set; }
    }
 }
}
1
João Paulo Amorim 3 Май 2019 в 12:53

Использование библиотеки newtonsoft

добавлена рабочая скрипка

public class Foo
{
  public string Type { get; set; }
  [JsonProperty("parameters")]
  public List<Dictionary<string, object>> Parameters { get; set; }
  [JsonProperty("defaultValue")]
  public string DefaultValue { get; set; }

}
var values = JsonConvert.DeserializeObject<Foo>(jsonStr);
values.Parameters = values
    .Parameters
    .Select(
        dic => dic
            .Where(kvp => new string[] { "A", "B", "C" }.Contains(kvp.Key))
            .ToDictionary(kvp => kvp.Key, kvp => kvp.Value))
    .ToList();
Console.WriteLine(JsonConvert.SerializeObject(values));
0
Thierry Prost 3 Май 2019 в 13:12

1) Разобрать свой json в JObject в пространстве имен с помощью using Newtonsoft.Json.Linq;

2) Получить 1-й объект внутри массива parameters, используя JObject.SelectToken()

3) Удалить A, B, C, используя JObject.Remove()

string json = "Your json here";

JObject jObject = JObject.Parse(json);

JObject jObj = (JObject)jObject.SelectToken("parameters[0]");
jObj.Property("A").Remove();
jObj.Property("B").Remove();
jObj.Property("C").Remove();

string output = jObject.ToString();

Вывод (из отладчика)

enter image description here

Онлайн-демонстрация

0
er-sho 3 Май 2019 в 13:41

С пакетом Newtonsoft.Json:

using System;
using Newtonsoft.Json;
using System.IO;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
          //File with json
          string jsontext = File.ReadAllText("json.json");

          dynamic json = JsonConvert.DeserializeObject(jsontext);
          foreach(var parameter in json.parameters)
          {
            Console.WriteLine(parameter.D);
            Console.WriteLine(parameter.E);
            Console.WriteLine(parameter.F);
          }
          Console.ReadLine();
        }
    }
}
0
user8689373 3 Май 2019 в 12:59