【发布时间】:2016-11-11 08:40:27
【问题描述】:
我已经实现了这个自定义 json 转换器来根据接收到的数据转换类型,但它似乎从未被调用过。该操作是否在进行本机解析并且我的转换器没有被使用?
我的结果已发布到此操作中
[HttpPost]
public JsonResult saveCustomfields(CustomFields customfields)
{
}
型号
public class Field
{
public string _label { get; set; }
public string _name { get; set; }
public string _type { get; set; }
public List<Option> option { get; set; }
}
public class Fields
{
[JsonProperty("field")]
[JsonConverter(typeof(SingleOrArrayConverter<Field>))]
public List<Field> field { get; set; }
}
public class Formtemplate
{
[JsonProperty("fields")]
public Fields fields { get; set; }
}
public class CustomFields
{
[JsonProperty("formtemplate")]
public Formtemplate formtemplate { get; set; }
}
自定义转换器
public class SingleOrArrayConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(List<T>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<T>>();
}
return new List<T> { token.ToObject<T>() };
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
阿贾克斯
<script>
jQuery(document).ready(function ($) {
var fbTemplate = document.getElementById('fb-template');
var formBuilder = $(fbTemplate).formBuilder();
$(".form-builder-save").click(function (e) {
e.preventDefault();
var x2js = new X2JS();
var xml = formBuilder.data('formBuilder').formData;
var json = x2js.xml_str2json(xml);
alert(JSON.stringify(json));
$.ajax({
url: "saveCustomfields",
type: "POST",
data: JSON.stringify(json),
contentType: "application/json; charset=utf-8",
dataType: "json",
});
});
});
</script>
【问题讨论】:
-
这是因为 JSON 可能会为该属性发布一个数组或字符串。如果是这样,在发送之前在 javascript 中执行
if (!(field instanceof Array)) { field = [field] }可能会更容易!! -
@CallumLinington 很好的解决方案,谢谢。没有比这更简单的了
-
回答问题,以便我将其标记为您的解决方案,再次感谢您
-
一切都为你完成
标签: c# json ajax asp.net-mvc