Почему DataContractJsonSerializer не сериализует мое свойство Id? - PullRequest
2 голосов
/ 31 августа 2009

Я использую 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, поскольку оно было заполнено после десериализации из данных формы. Есть предложения?

1 Ответ

1 голос
/ 06 сентября 2009

Что возвращает обычный метод Json () для этого объекта?

Согласно этому сообщению ... может быть проблема с полями автоматической поддержки в C #:

http://aaron -powell.spaces.live.com / блог / СНН! 91A824220E2BF369! 150.entry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...