.net core接收对方传递的body体里的json并反序列化
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+"}";
}