2011-06-10 9 views
1

public에서 internal으로 xml을 변경 한 후 xml을 serialize하려고 할 때 문제가 발생했습니다. 보호 수준을 변경하기 전에 정상적으로 작동 했으므로 공개 제한 사항을 해결할 수있는 방법을 모색 중입니다.xml에 내부 클래스의 serialization

내가 내부에 있기를 원하는 이유는 클래스를 라이브러리로 옮겼고 라이브러리 외부에서 유용하지 않기 때문입니다.

클래스 레이아웃의 간단한 예 :

[Serializable] 
internal class InternalSerializable 
{ 
    [XmlAttribute] 
    public int Foo = 5; 

    public InternalSerializable() 
    { 
    } 
} 

평상시 XmlSerializer 자동으로 생성하고, 임의의 어셈블리 이름을 가지고, 그래서 XmlSerializer를 미리 생성하여이를 참조하는 sgen.exe을 사용하여 시도된다

[assembly: InternalsVisibleTo("FileFormats.XmlSerializers")] 

/verbose 스위치로 sgen을 실행하면 공개 유형 만 처리 할 수 ​​있다고 표시됩니다.

그래서 누군가가 내부 형식을 처리하거나 내부 클래스를 직렬화하는 방법을 sgen을 속일 수 있는지 궁금합니다.

편집 : 나는 모든 것을

+0

[방법 CAN-I-직렬화 - 내부 클래스 - 사용 - XmlSerializer를 (가능 중복 http://stackoverflow.com/ 질문/6156692/how-can-i-serialize-internal-classes-using-xmlserializer) – nawfal

답변

0

Hackish를 재 작성하지 선호하지만 당신은 당신의 클래스를 공개하고 인텔리에서 그것을 숨기기 위해 EditorBrowsable 속성을 표시 할 수 있도록 내가이 문제에 꽤 몇 가지 클래스를 얻었다. 컴파일 된 어셈블리에

C#으로
[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] 
[Serializable] 
public class InternalSerializable 

, EditorBrowsable 일 : Hiding GetHashCode/Equals/ToString from fluent interface classes intellisense in Visual Studio for C#?

+0

감사합니다. 라이브러리는 내부 용으로 만 사용되므로 '적절한'방법을 찾을 수 없다면 내부적으로 쉽게 사용할 수 있기 때문에 나중에 사용하게 될 것입니다. –

관련 문제