문제

공개 getter와 Codedom이있는 보호 된 세터가있는 부동산을 생성 할 수 있습니까? 목표는 다음과 비슷한 것을 달성하는 것입니다.

[Serializable]
public class Wrapper {
  public Wrapper() { }
  private string _Field;
  public string Field { get; protected set; }
}

.NET 래퍼를 컴파일하려는 큰 COM 기반 API가있어 LINQ, 반사, 상속 및 직렬화와 같은 .NET 기능을 사용하기가 더 쉬워집니다. 유일한 방법은이 작업의 많은 부분을 코드 생성으로 자동화하는 것입니다.

이 객체에는 속성 세터가 필요한 직렬화를 통해 노출하려는 일부 읽기 전용 속성이 포함되어 있습니다. 그러나 너무 오래 세트를 보호하거나 유사하게 설정하는 방법을 찾지 못했습니다.

한 가지 방법은 부동산을 직렬화 할 수없는 것으로 표시하고 _field를 일련화하는 것일 수 있지만 직렬화 된 출력에 대한 한 가지 목표는 웹이므로 개인 구성원에게 모든 부재를 속여야합니다. 가능한 시리얼 라이저가 직렬화를 위해 밑줄이없는 (밑줄이없는)를 사용하도록 지시하는 시리얼 라이저 속성. 같은 이유로 나는 맞춤 직렬화가 불가능하다고 생각합니다.

내가 그것을 정확하게 사로화 할 수있는 것은 그리 중요하지 않습니다, 즉. 값이 사막화 중/를 통해 원래 가치로 유지되는 것은 중요하지 않습니다. API 소비자가 읽기 전용 필드를 변경하려고하지 않고 왜 아무것도 영향을 미치지 않는지 궁금해함으로써 혼란을 줄이기 위해 속성 만 읽습니다.

도움이 되었습니까?

해결책

이걸 마무리합니다. 원시 문자열 출력을 위해 Codedom Save 에서이 작업을 수행 할 방법이 없습니다.

그리고 XMLSERIALIZER에 제공되는 것은 시리얼 라이저가 클래스를 직렬화 할 수 있지만 보호 된 세터로 값을 직렬화하지는 않습니다.

그래서 불가능합니다. 내가 사용한 대안적인 방법은 a를 생성하는 것이 었습니다 ToSerializableType() 모든 속성을 읽거나 쓰는 유사한 클래스의 인스턴스를 반환하는 이러한 각 클래스에 대한 메소드.

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