我正在使用LINQ-to-SQL来实现CRUD功能,而DataContractJsonSerializer
则将对象序列化为JSON。我还使用ASP.NET MVC的数据绑定将值发布到执行插入的MVC操作。问题是它将序列化所有属性,除了 Id属性。我已经将模型设置为:
[Serializable]
[DataContract(Name = "campaign")]
[Table(Name = "hl.campaigns")]
public class Campaign
{
[DataMember(Name = "id")]
[Column(Name = "id", AutoSync = AutoSync.OnInsert, IsDbGenerated = true, IsPrimaryKey = true)]
public Int32 Id { get; set; }
[DataMember(Name = "createdBy")]
[Column(Name = "created_by")]
public Int32 CreatedBy { get; set; }
[DataMember(Name = "createdOnUtc")]
[Column(Name = "created_on_utc")]
public DateTime CreatedOnUtc { get; set; }
[DataMember(Name = "name")]
[Column(Name = "name", DbType = "NVarChar(256)")]
public String Name { get; set; }
/* more properties here */
}
这是我的自定义JsonDataContractActionResult
:
public class JsonDataContractActionResult : ActionResult
{
public JsonDataContractActionResult(Object data)
{
this.Data = data;
}
public Object Data { get; private set; }
public override void ExecuteResult(ControllerContext context)
{
var serializer = new DataContractJsonSerializer(this.Data.GetType());
String output = String.Empty;
using (var ms = new MemoryStream())
{
serializer.WriteObject(ms, this.Data);
output = Encoding.Default.GetString(ms.ToArray());
}
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.Write(output);
}
}
这是动作(JsonContract()返回JsonDataContractActionResult
):
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Modify([Bind(Prefix = "campaign")] Campaign campaign)
{
if (campaign.Id == 0)
{
try
{
CoreDB.Campaigns.InsertOnSubmit(campaign);
CoreDB.SubmitChanges();
return JsonContract(campaign);
}
catch(Exception ex)
{
// TODO: error handling
}
}
return null; // TODO: modification
}
我唯一能想到的是,数据绑定在某种程度上阻止了Id属性的序列化,因为它是在从表单数据反序列化后填充的。有什么建议吗?
答案 0 :(得分:1)
常规Json()方法为此对象返回什么?
根据这篇文章...... C#中的自动支持字段可能存在问题:
http://aaron-powell.spaces.live.com/blog/cns!91A824220E2BF369!150.entry