【问题标题】:Cannot write the correct value on Json file无法在 Json 文件上写入正确的值
【发布时间】:2020-07-01 17:48:46
【问题描述】:

我正在尝试编写一个函数,在我的 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; }
    }

使用邮递员如图:

普罗米修斯部分一切正常(没有错误)。

这是我使用的函数:

[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 循环并删除了.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;
}

【问题讨论】:

  • 可以分享一下targetResponse类的代码吗?
  • 是的,请检查帖子:)

标签: c# json api asp.net-core postman


【解决方案1】:

您正在执行_target.ToString(),并且由于_target 的类型为targetResponse,您将返回默认的ToString 文本,这是对象类型的全名。

您可能想要访问 _target 的属性。

【讨论】:

  • 我不能直接使用_target 它给我编译错误:/
  • 是的,因为targetResponse.targets 可能是List&lt;string&gt;,所以您需要添加_target 的属性(比如_target.Address 或其他什么?)
  • 不,它没有任何礼节,我在下面的帖子中添加了模型
  • 那么也许您正在尝试将所有_target.targets 添加到myList.FirstOrDefault().targets 的列表中?然后你可以使用myList.FirstOrDefault().targets.AddRange(_target.targets)
  • 抱歉,IList&lt;T&gt; 好像不支持AddRange,所以你可能想使用foreach循环将_target.targets的每个元素一个一个添加到myList.FirstOrDefault().targets。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2021-02-19
  • 2015-07-02
  • 2018-12-05
  • 1970-01-01
相关资源
最近更新 更多