관리자가 XML 파일로 직렬화 된 설정 클래스로 사용하는 클래스가있어서 관리자가 편집하여 응용 프로그램의 설정을 변경할 수 있습니다. (설정은 App.config에서 허용하는 것보다 조금 더 복잡합니다.)XML 파일을 읽기 전용 속성이있는 클래스로 deserialize하는 방법은 무엇입니까?
XmlSerializer 클래스를 사용하여 XML 파일을 deserialize하고 속성 클래스를 설정할 수 있기를 원하지만, 클래스/어셈블리를 사용하는 다른 개발자가 코드를 통해 속성을 설정/변경할 수 있기를 바랍니다. XmlSerializer 클래스를 사용하여이 작업을 수행 할 수 있습니까?
몇 가지 세부 정보 추가 :이 특정 클래스는 Collection이며 FxCop에 따르면 XmlSerializer 클래스는 읽기 전용 컬렉션을 deserialize하는 데 대한 특별한 지원을하고 있지만 더 이상 정보를 찾을 수 없었습니다. 이 규칙 위반에 대한 자세한 내용은 다음과 같습니다.
컬렉션을 반환하는 속성은 읽기 전용이므로 사용자가 원래 저장소를 완전히 대체 할 수 없습니다. 사용자는 컬렉션의 관련 메서드를 호출하여 컬렉션의 내용을 수정할 수 있습니다. XmlSerializer 클래스는 읽기 전용 컬렉션을 deserialize하는 데 특별한 지원을합니다. 자세한 내용은 XmlSerializer 개요를 참조하십시오.
이것은 내가 원했던 것이지만 어떻게 그럴 수 있습니까?
편집 : 좋아, 여기 조금 미쳤다고 생각해. 필자의 경우, 생성자에서 Collection 객체를 초기화 한 다음 속성 setter를 제거해야했습니다. 그런 다음 XmlSerializable 개체는 실제로 Collection 개체의 Add/AddRange 및 인덱서 속성을 사용하는 것을 알고 있습니다. 다음은 실제로 작동합니다!
public class MySettings
{
private Collection<MySubSettings> _subSettings;
public MySettings()
{
_subSettings = new Collection<MySubSettings>();
}
public Collection<MySubSettings> SubSettings
{
get { return _subSettings; }
}
}
SubSettings 속성에서 실제로 읽기 전용 컬렉션을 반환하지 않고 수정할 수있는 컬렉션을 반환하고 있습니다. –
나는 그것을 얻지 못한다. 당신은 전에 무엇을 했습니까? 내 말은, 사람들이 막지 못하게하는 것입니다. SubSettings = Blah; 컬렉션 자체는 실제로 읽기 전용이 아닙니까? –
@Rob Cooper : 그의 코드에서 볼 수 있듯이 컬렉션은 읽기 전용이 아닙니다. 그는 여전히 변경 가능한 컬렉션을 반환하지만 클래스에서 사용하는 참조는 변경할 수 없습니다. 이것이 그가 의도 한 바라면 괜찮습니다. – user7116