.net core接收对方传递的body体里的json并反序列化

发布于:2025-07-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

1、首先我在通用程序里有一个可以接收对象型和数组型json串的反序列化方法

public static async Task<Dictionary<string, string>> AllParameters(this HttpRequest request)
        {
            Dictionary<string, string> parameters = QueryParameters(request);

            request.EnableBuffering();

            using (StreamReader stream = new(request.Body, Encoding.UTF8, leaveOpen: true))
            {
                string content = await stream.ReadToEndAsync();
                request.Body.Position = 0;

                if (!string.IsNullOrWhiteSpace(content))
                {
                    try
                    {
                        // 去除 BOM
                        content = content.Trim('\uFEFF');
                        // 去除所有 \u00A0(不间断空格)
                        content = content.Replace("\u00A0", "");
                        // 可选:去除所有不可见空白字符
                        content = Regex.Replace(content, @"[\u200B-\u200D\uFEFF]", "");

                        string trimmed = content.TrimStart();
                        if (!(trimmed.StartsWith("{") || trimmed.StartsWith("[")))
                            throw new Exception("请求体不是合法的 JSON 格式。");

                        var node = JsonNode.Parse(content);
                        if (node is JsonObject obj)
                        {
                            foreach (KeyValuePair<string, JsonNode?> item in obj)
                            {
                                if (string.Compare(item.Key, "cmd", true) == 0)
                                    continue;

                                parameters.AddOrUpdate(item.Key, item.Value?.ToString());
                            }
                        }
                        else if (node is JsonArray arr)
                        {
                            parameters.AddOrUpdate("array", arr.ToJsonString());
                        }
                        else
                        {
                            throw new Exception("不支持的 JSON 类型: " + node?.GetType().Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("解析 JSON 失败,原始内容: " + content, ex);
                    }
                }
            }

            return parameters;
        }
    }
}

2、其次我在我的接口程序里引用了以上程序的dll,然后我就可以用它了

 public string ReceiveData([FromBody] List<OrgModel> array, [FromQuery] string model, [FromQuery] bool? dict=null)

{

  string code=“”;

  string name=“”;

    foreach (var zzData in array)

  {

      code=zzData.CODE;

      name=zzData.NAME;

  }

return "{code:"+code+"name:"+name+"}";

}


网站公告

今日签到

点亮在社区的每一天
去签到