无法使用Javasciptserializer序列化对象

时间:2014-06-10 17:27:40

标签: asp.net-mvc serialization javascriptserializer

我正在尝试将对象序列化为JSON字符串,如下所示:

new JavaScriptSerializer().Serialize(person)

在这里,人是具有诸如姓名,地址,城市,州等许多属性的对象,但是我已经如下所示装饰了类,因此它只会序列化名称和地址。

using System;
using System.Runtime.Serialization;

namespace DataAccess.Models
{
    [Serializable]
    [DataContract]
    public class Person
    {        
    public string Id { get; set; }

    [DataMember(Name = "full-name")]
    public string Name { get; set; }

    [DataMember(Name = "address")]
    public string Address { get; set; }

    public string City { get; set; }

    public string State { get; set; }

    public string Zip { get; set; }

    }
}

但是当我运行该程序时,new JavaScriptSerializer().Serialize(person)为我提供了所有数据的JSON,包括Id,City,State,Zip。

为什么不给我全名&地址?它似乎完全忽略了这些DataMember属性。

当我使用Newtonsoft的JsonConvert.SerializeObject(person)时,一切都很完美&它只序列化了Name&地址,但JavascriptSerializer提供所有数据。

任何人都可以告诉我可能是什么问题吗?

1 个答案:

答案 0 :(得分:1)

考虑在您不希望序列化的属性上使用[ScriptIgnore()]属性。

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute(v=vs.100).aspx

请在此处查看JavaScriptSerializer如何处理不同类型的详细列表:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

修改
请注意,JavascriptSerializer不知道DataMember属性,因此它们不会被JavascriptSerializer使用(JSON.net将使用它们,但JSON.Net也定义了它自己的构造:[JsonIgnore()] {{1}和许多其他属性支持自定义命名)。要实现此目的,请尝试使用System.Runtime.Serialization.Json命名空间中的 DataContractJsonSerializer 和一些回退。

有关其他信息,请参阅此问题和答案:

JavaScriptSerializer.Deserialize - how to change field names