일부 컬렉션이 포함 된 클래스가 있습니다. 컬렉션을 비워 둘 필요없이 IXmlSerializable을 구현하지 않고이 클래스의 인스턴스를 XML로 serialize하고자합니다. 빈 요소를 생성하는지 또는 요소를 전혀 작성하지 않든 상관 없습니다. 각 컬렉션 기반 속성에 대한 컬렉션을 초기화하지 않고도 작동합니다..NET XML serialization 및 Null 컬렉션
속성을 장식 할 수있는 모든 XML 특성을 살펴본 결과이 기능을 사용하지 못했습니다. 이것은 요소를 가질 수도 있고 전혀 가질 수도없는 간단한 일처럼 보입니다. 그런 다음 deserialize 될 때 그것은 null로 남겨 두거나 그 기간을 무시합니다.
다음은이 문제를 해결하는 데 사용할 간단한 버전의 클래스입니다. 이 값과 기본값을 사용하면 컬렉션이 null로 인해 "객체 참조가 객체의 인스턴스로 설정되지 않았습니다."예외가 발생합니다. 에 대한
public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }
public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}
편집 감사는 문제가 제대로 널을 처리하지 않았다 내를 GetHashCode 방법이었다 밝혀, 사람을 도움이됩니다. 일단 내가 고쳤다면 좋았어. 나는 올바른 것으로 대답 할 첫 번째 것을 표시했다. Red Herring을 유감스럽게 생각합니다.
그리고 무엇이 문제입니까? 그것은 작동해야합니다 (적어도 직렬화 및 비 직렬화). 당신이 좋아하지 않는 행동은 무엇입니까? –
귀하가 주장하는 예외를 재현 할 수 없습니다. 내가 준 MyClass의 인스턴스를 serialize하고 deserialize 할 수있었습니다. 어쩌면 다른 일이있을 수 있습니까? –
@Brian 네, 뭔가 다른 일이 일어나고있었습니다. 모든 빠른 도움과 XML 코드 자체가 아닌 것을 보여주는 덕분입니다. :) –