Захват сериализованного XML при десериализации - PullRequest
0 голосов
/ 26 октября 2010

.net, C #

Легко ли (с помощью атрибутов и т. Д.) Автоматически сохранить всю строку XML (как строковое поле), которая была создана при сериализации объекта при десериализации этого объекта?

Я спрашиваю, потому что я получаю заглушку XML от веб-службы, и эта заглушка содержит цифровую подпись, которую я могу использовать для проверки XML. Я могу десериализовать XML в полезный объект, который можно передать на уровень приложения для проверки, но мне тоже нужен XML. В идеале мой новый объект должен иметь свойство OriginalXML или что-то в этом роде. Я мог бы проверить XML на более высоком уровне, но это не очень удобно для меня.

Приветствия

Крис.

Ответы [ 2 ]

0 голосов
/ 26 октября 2010

Как насчет

[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;
    }        
}
0 голосов
/ 26 октября 2010

Вы можете загрузить файл XML в строку, без проблем. Но свойство OriginalXML должно быть помечено атрибутом [NonSerialized], потому что вы не хотите хранить эту строку при сериализации. Вам придется десериализовать, перезагрузить как 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,
Джеймс

...