C# DataContractSerializer-问题
我在数据契约序列化程序中遇到了一个非常愚蠢的问题。它拒绝工作。我只是想将一个对象序列化为一个XmlDocument,但我似乎遇到了麻烦 以下是我希望序列化的数据合同:C# DataContractSerializer-问题,c#,datacontractserializer,C#,Datacontractserializer,我在数据契约序列化程序中遇到了一个非常愚蠢的问题。它拒绝工作。我只是想将一个对象序列化为一个XmlDocument,但我似乎遇到了麻烦 以下是我希望序列化的数据合同: [DataContract(Namespace="urn://test", Name = "ServiceFault1")] public class ServiceFault { [DataMember()] public int hello { get; set; } [DataMember()]
[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; }
}
每当我调用serialize方法时,内存流总是空的。我也试过一个字符串生成器,只是想看看是否有什么结果
如果我使用XmlSerializer,这是可行的,但是我想理解为什么上面的代码根本不起作用?为什么序列化程序总是空的
谢谢你的帮助!
TM这是我用来序列化对象的代码,它似乎适合我。另外,我认为DataContract属性不是必需的,我只是在一个地方使用一个属性来忽略一个成员
DataContractSerializer serializer = new DataContractSerializer(toSers.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, toSer);
ms.Position = 0;
string serializedContent;
using(StreamReader sr = new StreamReader(ms))
{
serializedContent = sr.ReadToEnd();
}
我看到的区别是,我直接向MemoryStream写入,并将位置设置为
0,而不是调用Seek()
如果愿意,可以在实例上使用XmlDocument.LoadXml将结果字符串加载到XmlDocument中。问题在于以下行,因为XmlWriter尚未将其内容刷新到内存流中:
ser.WriteObject(XmlWriter.Create(mem), toSer);
尝试改用以下方法:
public static XmlDocument Serialize(ServiceFault toSer)
{
DataContractSerializer ser = new DataContractSerializer(toSer.GetType());
XmlDocument tmp = new XmlDocument();
using (MemoryStream mem = new MemoryStream())
{
using (var memWriter = XmlWriter.Create(mem))
{
ser.WriteObject(memWriter, toSer);
}
mem.Seek(0, SeekOrigin.Begin);
tmp.Load(mem);
}
return tmp;
}
在.WriteObject调用中,只需传入一个流(如“mem”)——不要创建XmlWriter:
ser.WriteObject(mem,toSer)代码>@marc\s,它会改变什么?WriteObject将在流内部创建一个XwlWriter…@Thomas Levesque:在我的例子中,对于XmlWriter,它不起作用,没有-它可以完美地工作。。。想想看……马克,这正是问题所在!啊,我从微软得到了这个样本D哦,我原以为这是件愚蠢的事。非常感谢。
public static XmlDocument Serialize(ServiceFault toSer)
{
DataContractSerializer ser = new DataContractSerializer(toSer.GetType());
XmlDocument tmp = new XmlDocument();
using (MemoryStream mem = new MemoryStream())
{
using (var memWriter = XmlWriter.Create(mem))
{
ser.WriteObject(memWriter, toSer);
}
mem.Seek(0, SeekOrigin.Begin);
tmp.Load(mem);
}
return tmp;
}