You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用x2js转JSON为XML传递到MVC控制器时参数为null如何解决

问题原因
  • x2js调用错误:x2js.json2xml_str() 方法接收的参数是JSON对象,不是JSON序列化字符串。你先执行了JSON.stringify(model)得到字符串再传入,转换出来的XML结构不符合预期,不是你想要的模型XML数据。
  • AJAX配置和传参不匹配:你设置了contentType: 'text/xml; encoding=utf-8',说明你要提交的请求体是纯XML格式,但你实际传的是{xml: data}这种键值对结构,jQuery会默认把这个对象序列化为application/x-www-form-urlencoded格式的表单数据,和你声明的contentType完全不一致,MVC模型绑定器没法按照你的预期解析出xml参数。
  • 控制器参数绑定逻辑不匹配:如果你要以表单参数的形式传递xml字符串,就不应该设置contentType为text/xml;如果你要传递纯XML请求体,控制器就不能直接用string xml参数接收,需要额外处理请求流。
修复方案

方案1:表单参数提交(改动最小)

前端修改

  1. 修正x2js的调用,直接传model对象,不要先做序列化
  2. 删掉错误的contentType配置,让jQuery自动用默认的application/x-www-form-urlencoded格式序列化参数
  3. 调整dataType为json,匹配控制器返回的JsonResult类型
let model = new Model();
model.ArticleName = "Test";

$.each(AttachmentsArray, function(i, item) {
  model.Files.push(
    new File(item.FileName, item.FileData)
  );
});

var x2js = new X2JS();
// 直接传JSON对象,不需要提前转字符串
var data = x2js.json2xml_str(model);

$.ajax({
  url: '/Home/PostUserData1',
  type: 'POST',
  data: {
    xml: data
  },
  dataType: 'json',
  success: function(result) {
    if (result === "Error") {

    } else if (result === "OK") {}
  },
  error: function(request) {}
});

后端无需修改,控制器的string xml参数即可正常接收值。

方案2:纯XML请求体提交(符合REST规范)

前端修改

  1. 修正x2js调用
  2. 请求体直接传XML字符串,不要包裹在{xml:xxx}对象里
  3. 保留contentType为text/xml
// 前面model构造逻辑保持不变
var x2js = new X2JS();
var xmlData = x2js.json2xml_str(model);

$.ajax({
  url: '/Home/PostUserData1',
  type: 'POST',
  // 直接传XML字符串作为请求体
  data: xmlData,
  contentType: 'text/xml; encoding=utf-8',
  dataType: 'json',
  success: function(result) {
    // 原有逻辑不变
  },
  error: function(request) {}
});

后端控制器修改

需要从请求流中读取XML内容:

public JsonResult PostUserData1()
{
    // 从请求体读取XML字符串
    string xml = new System.IO.StreamReader(Request.InputStream).ReadToEnd();
    // 后续业务逻辑
}

内容的提问来源于stack exchange,提问作者Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:06:05