Невозможно записать правильное значение в файл Json - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь написать функцию, которая записывает в моем файле Json значение, которое я ввожу в PostMan. У меня есть файл Json, как показано ниже:

[
    {
        "targets":[
            "192.168.1.101:9182",
            "192.168.1.103:9100",
            "192.168.1.105:9182"
        ]
    }
]

M пытался, например, цель с помощью следующего запроса:

{
        "targets": [
            "192.168.1.117:9100"
        ]
}

Вот моя модель класса:

public class targetResponse
    {
        public IList<string> targets { get; set; }
    }

с использованием почтальона, как показано на рисунке: enter image description here

Все хорошо работает в части Прометей (не дает мне ошибки).

Вот функция, которую я использую:

[HttpPost]
[ProducesResponseType(typeof(targetResponse), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<targetResponse>> PostNewInstanceToConfig([FromBody] targetResponse _target)
{
    IList<targetResponse> myList = new List<targetResponse>();
    var jsonString = System.IO.File
       .ReadAllText(_filePath);
    myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
    myList.FirstOrDefault().targets.Add(_target.ToString());
    StreamWriter myWriter = new StreamWriter(_filePath);
    JsonSerializer mySerializer = new JsonSerializer();
    mySerializer.Serialize(myWriter, myList);
    myWriter.Close();

    return null;
}

Он открывает файл и пишет следующее, Я не понимаю, почему это не так:

[
  {
    "targets": [
      "192.168.1.101:9182",
      "192.168.1.103:9100",
      "192.168.1.105:9182",
      "ApplicationTestCRUD_JSON.targetResponse",
      "ApplicationTestCRUD_JSON.targetResponse"
    ]
  }
]

"ApplicationTestCRUD_ JSON" - это название моего проекта.

Любая помощь, пожалуйста?

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

Я добавил foreach l oop и удалил .toString() метод, моя функция теперь выглядит так:

[HttpPost]
[ProducesResponseType(typeof(targetResponse), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<targetResponse>> PostNewInstanceToConfig([FromBody] targetResponse _target)
{
    IList<targetResponse> myList = new List<targetResponse>();
    var jsonString = System.IO.File
       .ReadAllText(_filePath);
    myList = JsonConvert.DeserializeObject<List<targetResponse>>(jsonString);
    foreach(var x in _target.targets)
    {
        myList.FirstOrDefault().targets.Add(x);
    }
    StreamWriter myWriter = new StreamWriter(_filePath);
    JsonSerializer mySerializer = new JsonSerializer();
    mySerializer.Serialize(myWriter, myList);
    myWriter.Close();

    return null;
}

1 Ответ

2 голосов
/ 20 марта 2020

Вы делаете _target.ToString() и, поскольку _target имеет тип targetResponse, вы получаете текст ToString по умолчанию, который является полным именем типа объекта.

Возможно, вы хотите получить доступ к свойство _target вместо.

...