对于具有1:1关系的查找表,LinqPad会生成一个属性,该属性指向使用查找值的对象集合。如何禁用它?
当我尝试使用Newtonsoft.JSON序列化表时,它会导致问题。
答案 0 :(得分:3)
您无法阻止LINQPad生成这些属性,但您可以告诉Newtonsoft不要使用IContractResolver
序列化它们:
在我的扩展程序查询中编写合同解析程序类,以便所有查询都可以使用它。在CreateProperties方法中,过滤属性的位置,您需要在属性类型上应用条件以排除导航属性。以下将排除所有n:1和1:1属性:
public class FlatResolver : DefaultContractResolver
{
public static JsonSerializerSettings Settings =
new JsonSerializerSettings { ContractResolver = new FlatResolver() };
protected override IList<JsonProperty> CreateProperties (Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties (type, memberSerialization);
properties = properties
.Where (p => !p.PropertyType.GetCustomAttributes (typeof (System.Data.Linq.Mapping.TableAttribute)).Any())
.ToList();
return properties;
}
}
然后序列化,就这样做:
JsonConvert.SerializeObject (myObject, FlatResolver.Settings).Dump();
您可以使用类似的逻辑来排除1:n,方法是检查实体类型的IEnumerable。