我正在尝试将对象序列化为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提供所有数据。
任何人都可以告诉我可能是什么问题吗?
答案 0 :(得分:1)
考虑在您不希望序列化的属性上使用[ScriptIgnore()]
属性。
请在此处查看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