我使用JSON.net来序列化我的EntityFramework对象。
在过去,我创建了一个将"JsonIgnore“属性应用于属性的类,然后将我的主EntityFramework类的"MetadataType”属性设置为新创建的类。
下面是一个示例:
将应用于EF类的类:
public class Role_DoNotSerialize
{
[JsonIgnore]
public string Users { get; set; }
}EF类的分部类文件:
[MetadataType(typeof(Role_DoNotSerialize))]
public partial class Role
{
}在上面的例子中,当序列化一个"Role“对象时,属性"Users”不会被序列化。
我的问题是,当我像这样添加EntityKey属性时,同样的技术无法工作:
public class Role_DoNotSerialize
{
[JsonIgnore]
public string Users { get; set; }
[JsonIgnore]
public System.Data.EntityKey EntityKey { get; set; }
}使用这个类,"EntityKey“属性仍然是序列化的。我做错了什么?
发布于 2012-04-26 00:33:55
你可以通过实现你自己的ContractResolver来做到这一点(使用JSON.NET 4.5的示例代码,也可以使用旧版本)
public class ExcludeEntityKeyContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties(type,memberSerialization);
return properties.Where(p => p.PropertyType != typeof (System.Data.EntityKey)).ToList();
}
}然后,可以对其进行设置,以设置JsonSerializerSettings对象的ContractResolver
JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.ContractResolver = new ExcludeEntityKeyContractResolver();请注意,您不仅限于一个lambda函数,而且您可以实现任何类型的检查。您甚至可以重写Converter per属性来执行自定义序列化。
发布于 2014-05-09 22:25:45
我认为JSON.NET的最新版本现在支持这一点。此示例适用于我们在MVC站点中的工作,但您可以随心所欲地使用字符串。
public ActionResult ContentJsonFormatted(object obj, Formatting formatting = Formatting.Indented)
{
string result = JsonConvert.SerializeObject(obj, formatting);
return Content(result, "text/plain");
}https://stackoverflow.com/questions/8591424
复制相似问题