2009-08-31 48 views
2

我使用LINQ-to-SQL進行CRUD功能,並且DataContractJsonSerializer將對象序列化爲JSON。我也使用ASP.NET MVC的數據綁定將值發佈到插入的MVC操作。問題是它會序列化除以外的所有屬性的Id屬性。我已經得到了模型設置爲這樣:爲什麼DataContractJsonSerializer不能序列化我的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屬性被序列化,因爲它在從表單數據反序列化後被填充。有什麼建議麼?

回答

相關問題