反序列化时出错 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。
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。