反序列化时捕获序列化的XML

时间:2010-10-26 14:32:19

标签: c# .net xml-serialization

.net,C#

是否可以(通过使用属性等)自动保存在反序列化该对象时序列化对象时创建的整个XML字符串(作为字符串字段)?

我问,因为我从Web服务接收XML存根,该存根包含可用于验证XML的数字签名。我可以将XML反序列化为一个有用的对象,可以传递到我的应用程序层进行验证,但我也需要XML。理想情况下,我的新对象将具有OriginalXML属性或其他内容。我可以在更高级别验证XML,但对我来说不太方便。

干杯,

克里斯。

2 个答案:

答案 0 :(得分:0)

您可以将XML文件加载到字符串中,没问题。但是,必须使用[NonSerialized]属性标记OriginalXML属性,因为您不希望在序列化时存储该字符串。您必须反序列化,重新加载为XmlDocument,并将结果字符串存储到该属性。

XmlDocument xmlDoc = new XmlDocument();
try    {
    xmlDoc.Load(serializedFile);
}
catch (XmlException exc) {
    // Handle the error
}

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlWriter= new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlWriter);

myObject.OriginalXML = xmlWriter.ToString();

HTH,
詹姆斯

答案 1 :(得分:0)

怎么样

[DataContract]
class FooBar
{
    //this property doesn't have the DataMember attribure 
    //and thus won't be serialized
    public string OriginalXml { get; set; }

    [DataMember] private int _foo;
    [DataMember] private string _bar;

    static public FooBar Deserialize(XmlReader reader)
    {
        var fooBar = 
           (FooBar)new DataContractSerializer(typeof(FooBar)).ReadObject(reader);
        fooBar.OriginalXml = reader.ToString();
        return fooBar;
    }        
}