2009-08-31 7 views
2

Я использую LINQ-to-SQL для функции CRUD и DataContractJsonSerializer для сериализации объекта в JSON. Я также использую привязку данных ASP.NET MVC к значениям post для действия 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, поскольку она была заполнена после того, как она была десериализована из данных формы. Какие-либо предложения?

ответ

Смежные вопросы