를 직렬화 복원에서 파생 클래스 ... 수집 가능한이 정의직렬화의 나는 다음과 같은 방법이있는 저장소 클래스가 일반 컬렉션 아직 일반 컬렉션
public T Single<T>(Predicate<T> expression)
{
using (var list = (Models.Collectable<T>)System.Xml.Serializer.Deserialize(typeof(Models.Collectable<T>), FileName))
{
return list.Find(expression);
}
}
..
[Serializable]
public class Collectable<T> : List<T>, IDisposable
{
public Collectable() { }
public void Dispose() { }
}
그리고 아이템이 그것을 사용합니다 ..
[Serializable]
[System.Xml.Serialization.XmlRoot("Titles")]
public partial class Titles : Collectable<Title>
{
}
문제는 내가 그것을 호출 할 때, 그것은 "Collecta ble "를 XmlRoot로 만들지 만 XmlRoot는"제목 "(모든 개체 제목)입니다.
이렇게 여러 .xml 파일로 수집되는 클래스가 있지만 일반 접근자가 파일을로드 할 때 기본 메서드를 다시 작성하는 것이 무의미한 것처럼 보이지만 각 파일에 적절한 루트 이름을 적용하려면 어떻게해야합니까? 각각에 대한 하드 코딩 방법없이? [System.Xml.Serialization.XmlRoot]는 무시 된 것 같습니다.
다음과 같이이라고...
var titles = Repository.List<Models.Title>();
내가는 XML과 같은 포맷을 제외하고
<Titlesxmlns=''> was not expected.
를 얻을. ..
<?xml version="1.0" encoding="utf-16"?>
<Titles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Title>
<Id>442daf7d-193c-4da8-be0b-417cec9dc1c5</Id>
</Title>
</Titles>
다음은 비 직렬화 코드입니다.
public static T Deserialize<T>(String xmlString)
{
System.Xml.Serialization.XmlSerializer XmlFormatSerializer
= new System.Xml.Serialization.XmlSerializer(typeof(T));
StreamReader XmlStringReader = new StreamReader(xmlString);
//XmlTextReader XmlFormatReader = new XmlTextReader(XmlStringReader);
try
{
return (T)XmlFormatSerializer.Deserialize(XmlStringReader);
}
catch (Exception e)
{
throw e;
}
finally
{
XmlStringReader.Close();
}
}
원하는 XML 예제를 보여주십시오. 또한 참고로 XML Serializer는'[Serializable]'속성을 무시합니다. –
좋아, 이걸 추가했습니다. – Ciel
감사. 이제 귀하가받은 완전한 예외를 보여주십시오. 그것을 잡아서'ex.ToString()'의 출력을 게시하십시오. –