0
인터페이스를 직렬화하려고합니다. 이것이 표준 직렬화를 통해 불가능하다는 것을 알고 있습니다. 그래서 기본 클래스에서 사용자 지정 직렬화를 사용했습니다.IXmlSerializer를 사용하여 인터페이스를 직렬화 및 비 직렬화하는 방법은 무엇입니까?
public interface IFoo
{
object Value { get; }
}
public abstract class Foo<T> : IFoo, IXmlSerializable
{
[XmlElement]
public T Value { get; set; }
[XmlIgnore]
object IFoo.Value { get { return Value; } }
XmlSchema IXmlSerializable.GetSchema() { return null; }
void IXmlSerializable.ReadXml(XmlReader reader) { throw new NotImplementedException(); }
void IXmlSerializable.WriteXml(XmlWriter writer)
{
XmlSerializer serial = new XmlSerializer(Value.GetType());
serial.Serialize(writer, Value);
}
}
public class FooA : Foo<string> { }
public class FooB : Foo<int> { }
public class FooC : Foo<List<Double>> { }
public class FooContainer : List<IFoo>, IXmlSerializable
{
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader) { throw new NotImplementedException(); }
public void WriteXml(XmlWriter writer)
{
ForEach(x =>
{
XmlSerializer serial = new XmlSerializer(x.GetType());
serial.Serialize(writer, x);
});
}
}
class Program
{
static void Main(string[] args)
{
FooContainer fooList = new FooContainer()
{
new FooA() { Value = "String" },
new FooB() { Value = 2 },
new FooC() { Value = new List<double>() {2, 3.4 } }
};
XmlSerializer serializer = new XmlSerializer(fooList.GetType(),
new Type[] { typeof(FooA), typeof(FooB), typeof(FooC) });
System.IO.TextWriter textWriter = new System.IO.StreamWriter(@"C:\temp\demo.xml");
serializer.Serialize(textWriter, fooList);
textWriter.Close();
}
}
사용자 지정 serialization이 올바르지 않습니다. 순간마다 모든 속성 값을 절약하지만 비 직렬화하려면이 작업을 수행하는 방법을 모릅니다.
아이디어는 Value 속성을 저장하고 fooContainer를 요소로 복구하는 것입니다.
예를 게시하는 데 도움이 될 수 있습니까? 나는 아직 성취하지 못했다. –