2015-06-16 6 views
1

класса, который я сериализации:Ошибка при десериализации XML

public class StyleProperties 
{ 
    [XmlAttribute] 
    public string Name; 
    [XmlAttribute] 
    public string Description; 
    [XmlAttribute] 
    public StyleType Type; 

    public ShapeStyleProperties ShapeStyle; 
    public TextStyleProperties TextStyle; 
} 

Часть, которая отвечает за сериализации данных:

XmlSerializer serializer = new XmlSerializer(typeof(StyleProperties)); 

PPT.Presentation pres = Globals.ThisAddIn.Application.ActivePresentation; 
CustomXMLParts parts = pres.CustomXMLParts; 

//var serializer = new DataContractSerializer(typeof(MyCustomData)); 
using (var stream = new MemoryStream()) 
{ 
    serializer.Serialize(stream, styleProperties); 
    stream.Seek(0, SeekOrigin.Begin); 

    var sr = new StreamReader(stream); 
    var myStr = sr.ReadToEnd(); 
    Console.WriteLine(myStr); 

    parts.Add(myStr); 

} 

часть, которая отвечает за десериализации:

public static T ReturnObjectFromXML<T>(CustomXMLPart customXMLPart) 
    { 

     using (XmlReader reader = XmlReader.Create(new StringReader(customXMLPart.XML))) 
     { 
      DataContractSerializer formatter0 = 
       new DataContractSerializer(typeof(T)); 

      return (T)formatter0.ReadObject(reader); 
     }   

    } 

Ошибка происходит, конечно, по строке

return (T)formatter0.ReadObject(reader); 

Ошибка, которую я получаю:

Ошибка в строке 1 позиция 23. Ожидая элемент 'StyleProperties' из пространства имен 'http://schemas.datacontract.org/2004/07/PPT_Styles_Tool' .. Обнаружен 'Элемент' с именем 'StyleProperties' пространство имен " ».

XML:

<?xml version="1.0"?><StyleProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="sdfdzdfvvc" Description="" Type="Shape"> 
    <ShapeStyle> 
    <Location> 
     <Left>521.6249</Left> 
     <Top>37.75</Top> 
    </Location> 
    <Size> 
     <Width>198.125</Width> 
     <Height>54</Height> 
    </Size> 
    <Fill> 
     <Color> 
     <SchemeColor>ppFill</SchemeColor> 
     <ObjectThemeColor>msoThemeColorAccent1</ObjectThemeColor> 
     <ColorType>msoColorTypeScheme</ColorType> 
     </Color> 
     <Transparency>System.__ComObject</Transparency> 
     <Visible>msoFalse</Visible> 
     <FillType>msoFillSolid</FillType> 
    </Fill> 
    <AutoShapeType>msoShapeNotPrimitive</AutoShapeType> 
    <Rotation>0</Rotation> 
    <LockAspectRatio>msoFalse</LockAspectRatio> 
    <BlackWhiteMode>msoBlackWhiteAutomatic</BlackWhiteMode> 
    <TextFrame> 
     <MarginTop>0</MarginTop> 
     <MarginLeft>0</MarginLeft> 
     <MarginBottom>0</MarginBottom> 
     <MarginRight>0</MarginRight> 
    </TextFrame> 
    <TextFrame2> 
     <WordWrap>msoTrue</WordWrap> 
    </TextFrame2> 
    <LineStyle> 
     <DashStyle>msoLineSolid</DashStyle> 
     <Transparency>0</Transparency> 
     <Weight>0.75</Weight> 
     <Color> 
     <SchemeColor>ppForeground</SchemeColor> 
     <ObjectThemeColor>msoThemeColorText1</ObjectThemeColor> 
     <ColorType>msoColorTypeScheme</ColorType> 
     </Color> 
     <Visible>msoFalse</Visible> 
     <LineStyle>msoLineSingle</LineStyle> 
     <LinePattern>msoPatternMixed</LinePattern> 
    </LineStyle> 
    <ShapeTFAutoSize>ppAutoSizeNone</ShapeTFAutoSize> 
    </ShapeStyle> 
    <TextStyle> 
    <Font/> 
    <ParagraphFormat/> 
    </TextStyle> 
</StyleProperties> 

Так от того, что я вижу, нет пространства имен: 'http://schemas.datacontract.org/2004/07/PPT_Styles_Tool' Но как я могу исправить это? Я новичок в работе с XML-документами и особенно сериализации/десериализации данных XML в/из объектов

+0

Пожалуйста, отредактируйте ваше сообщение, чтобы включить _real_ XML. Похоже, вы получили это от отладчика, и оно включает escape-символы '\' '. –

+0

OK, я его отредактировал. – buks

+0

Вы сериализуетесь с помощью' XmlSerializer', а затем пытаетесь прочитать его с помощью DataContractSerializer. выберите один или другой. –

ответ

1

Используйте [XmlElement] атрибут:

[XmlElement(ElementName = "StyleProperties", Namespace="http://schemas.datacontract.org/2004/07/PPT_Styles_Tool")] 
public class StyleProperties 
{ 
//... 

Кроме того, если вы используете XmlSerializer для сериализации, то вы должны использовать XmlSerializer для десериализации. Не DataContractSerializer.

+0

Огромное спасибо! Это работает! Мне просто пришлось изменить XmlElement в XMLRoot, потому что XMLElement не был принят отладчиком. – buks

Смежные вопросы