簡體   English   中英

如何將API方法的輸入參數轉換為.Net Core 5 API中的JSON文件?

[英]How to convert API method's input parameter to JSON file in .Net Core 5 API?

I am creating a method in.Net Core 5 Web API controller and this method will be invoked by different clients with input as in JSON format.

其中, datasource_values中的對象和屬性的數量是動態的。 它可能因客戶而異。 現在我需要編寫一個 API 方法來提取所有屬性值並僅將datasource_values存儲為 JSON 文件。 JSON 的文件名應該是source的值。

如果value有兩個source ,那么我需要創建兩個 JSON 文件。

我嘗試創建兩個 model 類和 API 方法來提取 JSON 數據,但我無法達到預期的結果。 在.Net Core 5 中,我不確定如何實現這一點。

輸入數據結構如下所示。

{
  "Name": "APAC",
  "value": [
    {
      "source": "datasource1",
      "datasource_values": [
        {
          "ID": 100,
          "Name": "ABCD"
        },
        {
          "ID": 101,
          "Name": "EFGH"
        }
      ]
    },
    {
      "source": "datasource2",
      "datasource_values": [
        {
          "No": 1,
          "Name": "ABC",
          "Amount": 1000
        },
        {
          "No": 2,
          "Name": "BBC",
          "Amount": 1100
        }
      ]
    }
  ]
}

Model Class:

    public class CreateJSON
    {
        public string Name { get; set; }
        public List<JSONData> value { get; set; }
    }

    public class JSONData
    {
        public string source { get; set; }
        public List<object> datasource1_values { get; set; }
    }

API方法:

[Route("CreateJSONData")]
        [HttpPost]
        public ActionResult<int> CreateJSONData([FromBody] CreateJSON ipdata)
        {
            try
            {
                string json = JsonSerializer.Serialize(ipdata);
                File.WriteAllText(@"c:\input.json", json);
                return Ok();
            }
            catch (Exception ex)
            {
                return StatusCode(500);
            }
        }

您不需要任何自定義類。

[HttpPost("CreateJSONData")]
public ActionResult<int> CreateJSONData([FromBody] JsonDocument ipdata)
        {
            try
            {
                string json = ipdata.RootElement.ToString();
                File.WriteAllText(@"c:\input.json", json);
                return Ok();
            }
            catch (Exception ex)
            {
                return StatusCode(500);
            }
        }

但我建議您使用 Newtonsoft.Json。

using Newtonsoft.Json;

[HttpPost("CreateJSONData")]
public ActionResult<int> CreateJSONData([FromBody] JObject ipdata)
        {
            try
            {
                string json = ipdata.ToString();
                File.WriteAllText(@"c:\input.json", json);
                return Ok();
            }
            catch (Exception ex)
            {
                return StatusCode(500);
            }
        }

更新

如果您只需要存儲數據部分

using Newtonsoft.Json;

json = ipdata["value"].ToString();

//or 

using System.Text.Json;

var json= ipdata.RootElement.GetProperty("value").ToString();
....

結果

[
  {
    "source": "datasource1",
    "datasource_values": [
      {
        "ID": 100,
        "Name": "ABCD"
      },
      {
        "ID": 101,
        "Name": "EFGH"
      }
    ]
  },
  {
    "source": "datasource2",
    "datasource_values": [
      {
        "No": 1,
        "Name": "ABC",
        "Amount": 1000
      },
      {
        "No": 2,
        "Name": "BBC",
        "Amount": 1100
      }
    ]
  }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM