1

我正在尝试使用 fetch 将多个对象发布到 .core 3.1 API。我已经设法将结果作为 JsonElement 接收,但我无法对其进行反序列化。

JS 数据和获取:

       const users = [
            {
                ID: 1,
                Firstname: "MyFirstname",
                Lastname: "MyLastname"
            },
            {
                ID: 2,
                Firstname: "Jeff",
                Lastname: "Troll"
            }
        ];

        const company = {
            ID: 1,
            Companyname: "Stackoverflow",
            Location: "Unknown"
        };

        await fetch(URL, {
            method: "POST",
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
            users: users,
            company:company
           })
        })
            .then(response => {
                response.text().then(function (text) {
                    alert(text);
                });
            });

帖子通过我的操作,我可以看到 JSON 结果,但我无法反序列化它。

我的行动:

        [HttpPost]
        public async Task<ActionResult<Users>> Post([FromBody]JsonElement data)
        {
            try
            {
                var users = JsonSerializer.Deserialize<Users>(data.GetRawText());
                var company = JsonSerializer.Deserialize<Company>(data.GetRawText());
                ...
            }
        }

在我尝试反序列化它们后,用户和公司属性为空。不知道我做错了什么,以及如何在不为此创建特定模型的情况下进行简单的反序列化(我不希望这样做,因为这是我只使用一次的帖子。

JsonElement 数据如下所示:

ValueKind = Object : "
{"users":[{"ID":1,"Firstname":"MyFirstname","Lastname":"MyLastname"},
{"ID":2,"Firstname":"Jeff","Lastname":"Troll"}],
"company":
{"ID":1,"Companyname":"Stackoverflow","Location":"Unknown"}}
"

JsonElement 是正确的选择吗?或者我可以通过其他方式解决它吗?

4

1 回答 1

1

@arkhz 要回答您的问题,请在实施或解决方案下方找到。

    public class Users
    {
        public int ID { get; set; }
        public string Firstname { get; set; }
        public string Lastname { get; set; }
    }

    public class Company
    {
        public int ID { get; set; }
        public string Companyname { get; set; }
        public string Location { get; set; }
    }

        [HttpPost]
        public async Task<ActionResult<Users>> Post([FromBody]JsonElement data)
        {
            try
            {
                var users = JsonSerializer.Deserialize<List<Users>>(data.GetRawText());
                var company = JsonSerializer.Deserialize<Company>(data.GetRawText());
                return Ok(new { message = "", data = users });
            }
            catch
            {
                return Ok(new { message = "", data = data });
            }
        }

因此,特别是您的用户和公司的 json 对象是用户对象列表或用户对象集合。

在下面找到作为测试发送的示例 JsonString

{
    "users": [
        {
            "ID": 1,
            "Firstname": "MyFirstname",
            "Lastname": "MyLastname"
        },
        {
            "ID": 2,
            "Firstname": "Jeff",
            "Lastname": "Troll"
        }
    ],
    "company": {
        "ID": 1,
        "Companyname": "Stackoverflow",
        "Location": "Unknown"
    }
}

请你也可以像这样创造你的身体。

var body = {"users": users, "company":company};

 await fetch(URL, {
            method: "POST",
            headers: {
                'Content-Type': 'application/json'
            },
            body:body
        })
            .then(response => {
                response.text().then(function (text) {
                    alert(text);
                });
            });

请这个工作,我已经测试了一遍。我可以分享你测试邮递员的截图。用 vscode。

谢谢

于 2020-06-26T08:20:00.930 回答