OData로 serialize되는 모델에 특성을 넣을 수 있으며이를 기반으로 직렬화하도록 선택할 수 있습니까?Odata 4 - ODataResourceSerializer의 사용자 지정 특성을 기반으로 속성을 serialize하는 방법
ODataResourceSerializer를 성공적으로 확장하고 CreateStructuralProperty를 재정의했습니다. 이것은 나에게 속성의 이름을 확인하고 그것을 직렬화할지 여부를 선택하는 기능을 제공한다.
다음은 내가 설정 한 (작동중인) 요약입니다. 이것은 내가 시작에서 서비스 ... 여기
private static void ConfigureODataServices(IContainerBuilder builder)
{
// add custom odata serializer
builder.AddService<ODataSerializerProvider>(Singleton, s => new CustomODataSerializerProvider(s));
}
그리고 등록을하고있어 어디 나는 현재 단지이 속성 직렬화할지 여부를 선택하는 속성 이름을 사용하고 내 사용자 정의 포맷터,이다 :
은public class CustomODataSerializerProvider : DefaultODataSerializerProvider
{
private AnnotatingEntitySerializer _annotatingEntitySerializer;
public CustomODataSerializerProvider(IServiceProvider container) : base(container)
{
_annotatingEntitySerializer = new AnnotatingEntitySerializer(this);
}
public override ODataEdmTypeSerializer GetEdmTypeSerializer(IEdmTypeReference edmType)
{
if (edmType.Definition.TypeKind == EdmTypeKind.Entity)
return new AnnotatingEntitySerializer(this);
return base.GetEdmTypeSerializer(edmType);
}
}
public class AnnotatingEntitySerializer : ODataResourceSerializer
{
public AnnotatingEntitySerializer(ODataSerializerProvider serializerProvider)
: base(serializerProvider)
{
}
public override Microsoft.OData.ODataProperty CreateStructuralProperty(IEdmStructuralProperty structuralProperty, ResourceContext resourceContext)
{
Microsoft.OData.ODataProperty property = base.CreateStructuralProperty(structuralProperty, resourceContext);
if (resourceContext.StructuredType.FullTypeName() == typeof(Site).FullName)
{
if (property.Name == "IsDeleted") // NOTE: here, rather than checking for the property name, I want to check if it has an attribute of "ExcludeMe"
{
return null;
}
}
return property;
}
public override void AppendDynamicProperties(ODataResource resource, System.Web.OData.Formatter.Serialization.SelectExpandNode selectExpandNode,
ResourceContext resourceContext)
{
base.AppendDynamicProperties(resource, selectExpandNode, resourceContext);
}
}
물론 속성을 사용하여 하드 코딩 된 속성 이름이 아닌 직렬화 여부를 선택하고 싶습니다. 가능한? 감사. 그것은 https://github.com/xuzhg/WebApiSample/tree/master/WebApiComplexTypeSkipPropertyTest 보이는