13
나는 중첩 된 두 개의 다른 클래스가있는 클래스 리소스가있는 시나리오가 있습니다. Action 및 ResourceURL. ResourceURL에 대한 Resource 및 Action에 대한 사용자 지정 xmlserializer를 작성해야합니다. 두 가지 모두에 대해 IXmlSerializable을 구현했습니다.중첩 된/하위 개체에 대한 사용자 지정 XmlSerialization
문제는 Resource를 serialize 할 때 Action.WriteXML (XmlWriter)을 호출하여 Action의 serialize 된 폼을 가져 오지만 ResourceURL의 serialize 된 폼을 가져올 수 없다는 것입니다. 태그가 엉망이되어 태그가 추가됩니다.
그래서 어떻게 중첩 된 개체에 대한 고객의 소리가 있지만 다른 개체에 대한 고객의 직렬화가있는 개체를 serialize합니까? 당신이 얻을 캐스팅 할 필요 -
void IXmlSerializable.ReadXml(XmlReader reader)
{
// Simple string value
this.Name = reader.GetAttribute("Name");
// Object without IXmlSerializable implementation here:
reader.ReadStartElement();
if (reader.Name == "NonCustomObject")
{
reader.ReadStartElement();
this.NonCustomObject = new XmlSerializer(NonCustomObjectType).Deserialize(reader);
reader.ReadEndElement();
}
// Object with IXmlSerializable implementation here:
reader.ReadStartElement();
if (reader.Name == "CustomObject")
{
(this.CustomObject as IXmlSerializable).ReadXml(reader);
reader.ReadEndElement();
}
}
'역 직렬화()'리턴'형태로 object' :
여기가 해당되는 ReadXml 방법입니다 : 여기 – Guss
@Guss 어떻게 그렇게? .NET 제네릭은 CLR 지원으로 인해 Java generics보다 훨씬 뛰어납니다. C++ 템플릿은 모든 가능한 변형을 미리 컴파일해야하기 때문에 더욱 악화됩니다. –
@ Mr.TA - (a) 귀하가 지정한 문제에 대해 분쟁을 제기하지 않았으며 이는 닷넷에서 심각한 문제입니다. (b) 제네릭은 컴파일 과정에서 CLR과 관련이 있다는 것을 이해하지 못합니다. 이후에 정보를 보관할 이유가 없습니다. - 기본적으로 "안전한 전송"도움말입니다. (C) C++에 대한 귀하의 주장은 틀린 것입니다 : 실제로 사용중인 유형에 대해서만 C++ 템플릿이 컴파일됩니다. – Guss