문제

개인 매개 변수가없는 생성자가 작동하지만 매개 변수가없는 생성자가없는 객체는 어떻습니까?

타사 라이브러리에서 유형을 노출 시키려고하므로 유형 정의를 제어 할 수 없습니다.

가장 쉬운 방법이 있다면? 예를 들어 하위 유형을 만들어야 할 사항이 없습니다.

편집하다:

내가 찾고있는 것은 여기에 표시된 사용자 정의 수준과 같은 것입니다. http://msdn.microsoft.com/en-us/magazine/cc163902.aspx비록 나는 직렬화/사제 화하기 위해 스트림에 의지하고 싶지는 않지만.

도움이 되었습니까?

해결책

실제로 임의의 유형을 직렬화 할 수는 없습니다. 일부 경우에 (XmlSerializer, 예를 들어) 런타임은 옵션을 노출하여 속성을 스푸핑합니다. 하지만 DataContractSerializer 이것을 허용하지 않습니다. 실현 가능한 옵션 :

  • 자신의 유형 뒤에 수업을 숨기십시오 ~이다 직렬화 가능 (많은 작업)
  • 바이너리 포피터 대리자 제공 (Yeuch)
  • 자신의 직렬화 코어를 작성하십시오 (제대로하기위한 많은 작업)

본질적으로, 무언가가 아닌 경우 설계 직렬화의 경우 프레임 워크가 거의 없습니다 허락하다 당신은 그것을 직렬화합니다.

다른 팁

저는 WCF 전문가는 아니지만 임의의 유형을 가진 생성자에서 직렬화를 지원할 가능성은 낮습니다. 즉, 그들은 값을 위해 무엇을 전달했기 때문에? 참조 유형과 스트러크의 빈 값에 대해 NULL을 전달할 수 있습니다. 그러나 완전히 빈 데이터로 구성 할 수있는 유형은 무엇입니까?

나는 당신이 2 가지 옵션 중 1 개에 갇혀 있다고 생각합니다.

  1. 하위 클래스 문제의 유형 및 적절한 기본값을 비모수없는 생성자에게 전달합니다.
  2. 직렬화를 위해 존재하는 유형을 만듭니다. 완료되면 관심있는 원래 유형의 인스턴스를 만들 수 있습니다. 일종의 다리입니다.

개인적으로 나는 #2에 갈 것입니다. 클래스 A 데이터 만 구조로 만들고 직렬화 및 공장 목적으로 최적화하십시오.

기본 생성자가없는 기본 객체를 반환하는 WCF 서비스를 사용하여 약간의 테스트를 실행했습니다.

//[DataContract]
//[Serializable]
public class MyObject
{
    public MyObject(string _name)
    {
        Name = _name;
    }

    //[DataMember]
    public string Name { get; set; }

    //[DataMember]
    public string Address { get; set; }
}

서비스의 모습은 다음과 같습니다.

public class MyService : IMyService
{
    #region IMyService Members

    public MyObject GetByName(string _name)
    {
        return new MyObject(_name) { Address = "Test Address" };
    }

    #endregion
}

이것은 myObject가 [datacontract] 또는 [serializable] 인 한 실제로 작동합니다. 흥미롭게도 클라이언트 측의 기본 생성자가 필요하지 않은 것 같습니다. 여기에는 관련 게시물이 있습니다.

WCF Desorialization은 생성자를 호출하지 않고 어떻게 인스턴스화합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top