反序列化时出错 XML

Error during deserializing XML

我正在连载的

Class:

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);

我得到的错误:

Error in line 1 position 23. Expecting element 'StyleProperties' from namespace 'http://schemas.datacontract.org/2004/07/PPT_Styles_Tool'.. Encountered 'Element' with name 'StyleProperties', namespace ''.

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 文档尤其是 serializing/deserializing XML 数据 to/from 对象

的菜鸟

使用[XmlElement]属性:

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

此外,如果您使用XmlSerializer 进行序列化,那么您应该使用XmlSerializer 进行反序列化。不是 DataContractSerializer。