[ProtoBeforeSerialization]과 같은 콜백 중 하나를 명시 적으로 호출 할 수 있습니까? 다른 수업에서? 강제로 deserialization 프로세스를 시도하고 있습니까?
다음과 같은 콜백이 있다고 가정하면 :
[ProtoBeforeSerialization]
public void FixupStuffBeforeSerialization() {...}
[ProtoAfterSerialization]
public void FixupStuffAfterSerialization() {...}
[ProtoBeforeDeserialization]
public void FixupStuffBeforeDeserialization() {...}
[ProtoAfterDeserialization]
public void FixupStuffAfterDeserialization() {...}
콜백 중 하나를 명시 적으로 호출하는 프로세스는 콜백 중 하나를 명시 적으로 호출하는 것입니다. 예를 들면 :
obj.FixupStuffBeforeDeserialization();
좀 더 미묘하고 미묘한 점이 있다면 알려주세요. 이상적으로는 구체적인 예를 제공하여 알려주세요. 시나리오가 당신이 단지 가지고 object obj
있고 메소드의 이름을 모른다면-당신은 리플렉션을 통해 그들을 찾아야 할 것입니다. 다른 serializer와의 호환성 및 비교 가능성을 위해 인터페이스가 아닌 속성을 통해 지정됩니다.
그러나 다음과 같습니다.
var method = FindMethod<ProtoAfterDeserializationAttribute>(obj);
if(method != null) method.Invoke(obj, null);
와:
static MethodInfo FindMethod<T>(object obj)
where T : Attribute
{
if(obj == null) return null;
var methods = obj.GetType().GetMethods(
BindingFlags.Public | BindingFlags.Instance);
return methods.SingleOrDefault(m =>
Attribute.IsDefined(m, typeof(T)) && m.GetParameters().Length == 0);
}
protobuf-net은 실제로 컨텍스트 매개 변수를 포함하여 이러한 메서드에 대해 여러 서명을 지원합니다.하지만 이것은 일반적인 가이드 역할을해야합니다.
참고 기술적으로 콜백을 선택하는 규칙은 더 위의 제안 것을 복잡; protobuf-net이 사용할 실제 방법 을 알고 싶다면 type-model을 물어보십시오 :
var callbacks = RuntimeTypeModel.Default[obj.GetType].Callbacks;
MethodInfo before = callbacks.BeforeDeserialize,
after = callbacks.AfterDeserialize;
// ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다