У меня есть то, что должно быть ОЧЕНЬ СИЛЬНОЙ проблемой с Serializer Data Contract. Он отказывается работать. Я просто пытаюсь сериализовать объект в XmlDocument, но я, кажется, нажимаю на стену.DataContractSerializer - Проблемы
Вот datacontracts я хочу сериализация:
[DataContract(Namespace="urn://test", Name = "ServiceFault1")]
public class ServiceFault
{
[DataMember()]
public int hello { get; set; }
[DataMember()]
public List<Error> Errors {get; set;}
}
[DataContract(Namespace = "urn://test", Name = "Error1")]
public class Error
{
[DataMember()]
public string ErrorCategoryCode { get; set; }
[DataMember()]
public string LocalErrorCode { get; set; }
[DataMember()]
public string Description { get; set; }
}
и метод, который делает сериализации;
public static XmlDocument Serialize(ServiceFault toSer)
{
DataContractSerializer ser = new DataContractSerializer(toSer.GetType());
MemoryStream mem = new MemoryStream();
ser.WriteObject(XmlWriter.Create(mem), toSer);
XmlDocument tmp = new XmlDocument();
mem.Seek(0, SeekOrigin.Begin);
tmp.Load(mem);
return tmp;
}
Всякий раз, когда я вызываю метод сериализации, поток памяти всегда пуст. Я также попробовал построитель строк, просто чтобы узнать, выходит ли что-то.
Если я использую XmlSerializer, это работает, однако я хотел бы понять, почему на земле код выше не работает? Почему сериализатор всегда пуст?
Спасибо за помощь! TM
На вашем .WriteObject вызов, просто передать в поток (например, mem) - не создавать XmlWriter: 'ser.WriteObject (mem, toSer);' –
@marc_s, что бы это изменилось? WriteObject будет создавать XwlWriter поверх потока в любом случае ... –
@Thomas Levesque: в моем случае ** с ** XmlWriter он не работал, без - он работает безупречно ... go figure ... –