인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

4thSpace

세 가지 구성 요소가 있습니다.

  • 유틸리티 라이브러리 (Processor.dll) : 요소 라이브러리 만 알고 있음
  • 요소 라이브러리 (IElement) : 라이브러리에 대해 알지 못함
  • 앱 : 두 라이브러리에 대해 알고 있음

앱은 프로세서 라이브러리를 호출하고 다음 유형의 클래스를 전달합니다.

ClassA : IElement

ClassA는 프로세서로 전달되기 전에 직렬화됩니다. 프로세서는 기본 라이브러리이며 ClassA와 같은 클래스 유형에 대해 알지 못합니다. 그러나 IElement에 대해 알고 있습니다. 프로세서는 전달 된 IElement (ClassA 유형)를 역 직렬화합니다.

문제는 인터페이스를 역 직렬화 할 수 없다는 것입니다. 그러나 프로세서는 ClassA에 대해 알지 못하므로 알 수 없습니다. 이 경우 전달 된 객체에 대한 참조를 어떻게 얻을 수 있습니까?

폴 케이스 터

이를 처리하는 한 가지 방법은 classA를로드하는 SerializationBinder 구현을 만든 다음, 바인더 인스턴스에 대한 참조를 Processor.dll에 전달하여 Processor.dll이 역 직렬화에 바인더 구현을 사용할 수 있도록하는 것입니다. 이렇게하면 앱 모듈에서 ClassA를 참조하는 코드를 유지할 수 있습니다 (물론 SerializationBinder 구현은 앱 모듈에서 정의되어야합니다).

다음은 예입니다. 요소 라이브러리에이 인터페이스가 있습니다.

public interface IElement
{
    string DoSomething(string param);
}

다음과 같이 프로세서를 정의합니다.

public class ProcessorClass
{
    private SerializationBinder _binder;

    public ProcessorClass(SerializationBinder binder)
    {
        _binder = binder;
    }

    public string CallDoSomething(Stream s)
    {
        var formatter = new BinaryFormatter();

        formatter.Binder = _binder;

       var i = (IElement)formatter.Deserialize(s);

        return i.DoSomething("the processor");
    }
}

이 예에서는 매우 간단한 직렬화 바인더를 사용하고 있습니다. 이는 App 어셈블리에서 정의되어야하므로 App ClassA이외의 다른 곳에 대한 참조가 필요하지 않습니다 .

class Binder : SerializationBinder
{
    //WARNING: demonstration only, DO NOT USE in production code
    public override Type BindToType(string assemblyName, string typeName)
    {
        return Type.GetType("ClassA");
    }
}

그런 다음 모든 것을 앱 어셈블리로 가져옵니다.

var ms = new MemoryStream();

var formatter = new BinaryFormatter();

var theObject = new ClassA();

formatter.Serialize(ms, theObject);

var processor = new ProcessorClass(new Binder());

ms.Seek(0, SeekOrigin.Begin);

string result = processor.CallDoSomething(ms);

SerializationBinder의 다른 예는 이 MSDN 예제참조하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

아래로 스크롤 할 때만 div 페이드 인을 만들 수있는 방법은 무엇입니까?

분류에서Dev

JsonSerializer를 사용하여 이기종 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

C #을 사용하여 XML 파일에서 데이터를 직렬화 및 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Solr / Lucene을 사용하여 맵을 직렬화 / 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

사용자가 제출을 위해 Shift + Enter를 사용할 때 새 텍스트 영역을 만드는 방법은 무엇입니까?

분류에서Dev

역할을 설치하기 전에 호스트에서 SSH를 사용할 수있을 때까지 기다리는 방법은 무엇입니까?

분류에서Dev

Executor 인터페이스를 사용할 때 소켓을 닫는 방법은 무엇입니까?

분류에서Dev

멤버가 직접 직렬화 할 수 없지만 str () 표현이있는 객체를 직렬화하는 방법은 무엇입니까?

분류에서Dev

단일 노드로 XML을 역 직렬화하기 위해 직렬화 가능한 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

RestSharp는 내 JSON 응답을 제대로 자동 역 직렬화 할 수 없지만 JSON.NET은 할 수 있습니다. 이유는 무엇입니까?

분류에서Dev

vim을 사용할 때이 녹색 영역을 제거하는 방법은 무엇입니까?

분류에서Dev

XML을 역 직렬화 할 때 값이 null 인 것을 수정하는 방법

분류에서Dev

공용 열거 형을 직렬화 / 역 직렬화하는 쉬운 방법은 무엇입니까?

분류에서Dev

파이썬 GIL을 사용하지 않고 직렬화 / 역 직렬화하는 방법이 있습니까?

분류에서Dev

강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

분류에서Dev

정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

데이터를 사용할 수있을 때만 한 번에 세 개의 항목을 행에 추가하는 방법은 무엇입니까?

분류에서Dev

사용자 인터페이스에 대한 역할 및 권한 남용을 방지하는 방법은 무엇입니까?

분류에서Dev

xml 파일을 역 직렬화 할 때 발생하는 문제를 해결하는 방법은 무엇입니까?

분류에서Dev

JSON.NET : 부모 (홀더) 개체 값을 기반으로 인터페이스 속성을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

NewtonSoft Json을 사용하여 변수 유형 속성으로 클래스로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

JSON을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

WebFlux : 컨트롤러의 인터페이스 매개 변수를 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

클래스 내부의 개인 메서드를 사용하여 PyTorch 저장된 모델을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

protobuf-net에서 주어진 유형을 직렬화 / 역 직렬화 할 때 사용할 사용자 정의 메소드를 지정하는 방법이 있습니까?

분류에서Dev

전역 변수를 만들고 다른 페이지에서 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

  2. 2

    인터페이스 만 사용할 수있을 때 역 직렬화하는 방법은 무엇입니까?

  3. 3

    아래로 스크롤 할 때만 div 페이드 인을 만들 수있는 방법은 무엇입니까?

  4. 4

    JsonSerializer를 사용하여 이기종 JSON 배열을 역 직렬화하는 방법은 무엇입니까?

  5. 5

    C #을 사용하여 XML 파일에서 데이터를 직렬화 및 역 직렬화하는 방법은 무엇입니까?

  6. 6

    Solr / Lucene을 사용하여 맵을 직렬화 / 역 직렬화하는 방법은 무엇입니까?

  7. 7

    사용자가 제출을 위해 Shift + Enter를 사용할 때 새 텍스트 영역을 만드는 방법은 무엇입니까?

  8. 8

    역할을 설치하기 전에 호스트에서 SSH를 사용할 수있을 때까지 기다리는 방법은 무엇입니까?

  9. 9

    Executor 인터페이스를 사용할 때 소켓을 닫는 방법은 무엇입니까?

  10. 10

    멤버가 직접 직렬화 할 수 없지만 str () 표현이있는 객체를 직렬화하는 방법은 무엇입니까?

  11. 11

    단일 노드로 XML을 역 직렬화하기 위해 직렬화 가능한 클래스를 만드는 방법은 무엇입니까?

  12. 12

    RestSharp는 내 JSON 응답을 제대로 자동 역 직렬화 할 수 없지만 JSON.NET은 할 수 있습니다. 이유는 무엇입니까?

  13. 13

    vim을 사용할 때이 녹색 영역을 제거하는 방법은 무엇입니까?

  14. 14

    XML을 역 직렬화 할 때 값이 null 인 것을 수정하는 방법

  15. 15

    공용 열거 형을 직렬화 / 역 직렬화하는 쉬운 방법은 무엇입니까?

  16. 16

    파이썬 GIL을 사용하지 않고 직렬화 / 역 직렬화하는 방법이 있습니까?

  17. 17

    강력한 형식의 개체로 JSON 응답을 직접 역 직렬화 할 때 필드를 피하는 방법은 무엇입니까?

  18. 18

    정수를 키로 사용하여 JSON을 역 직렬화하는 방법은 무엇입니까?

  19. 19

    데이터를 사용할 수있을 때만 한 번에 세 개의 항목을 행에 추가하는 방법은 무엇입니까?

  20. 20

    사용자 인터페이스에 대한 역할 및 권한 남용을 방지하는 방법은 무엇입니까?

  21. 21

    xml 파일을 역 직렬화 할 때 발생하는 문제를 해결하는 방법은 무엇입니까?

  22. 22

    JSON.NET : 부모 (홀더) 개체 값을 기반으로 인터페이스 속성을 역 직렬화하는 방법은 무엇입니까?

  23. 23

    NewtonSoft Json을 사용하여 변수 유형 속성으로 클래스로 역 직렬화하는 방법은 무엇입니까?

  24. 24

    JSON을 역 직렬화하는 방법은 무엇입니까?

  25. 25

    WebFlux : 컨트롤러의 인터페이스 매개 변수를 역 직렬화하는 방법은 무엇입니까?

  26. 26

    클래스 내부의 개인 메서드를 사용하여 PyTorch 저장된 모델을 역 직렬화하는 방법은 무엇입니까?

  27. 27

    Json.Net을 사용하여 숫자의 속성 이름으로 시작하는 json을 역 직렬화하는 방법은 무엇입니까?

  28. 28

    protobuf-net에서 주어진 유형을 직렬화 / 역 직렬화 할 때 사용할 사용자 정의 메소드를 지정하는 방법이 있습니까?

  29. 29

    전역 변수를 만들고 다른 페이지에서 사용하는 방법은 무엇입니까?

뜨겁다태그

보관