【发布时间】:2012-01-20 15:48:49
【问题描述】:
我正在运行一个桌面应用程序,当我到达这一行时:
serializer.Serialize(new StringWriter(sb), value);
它会引发以下错误:
There was an error generating the XML document.
这是代码:
public static string Serialize(object value)
{
var serializer = new XmlSerializer(value.GetType());
var sb = new StringBuilder();
serializer.Serialize(new StringWriter(sb), value);
return sb.ToString();
}
当我调试时,我在 Watch 部分看到:
value.GetType().IsSerializable true bool
我在声明 values 的类之前设置这个:
[Serializable]
提前谢谢你。
异常详情
System.InvalidOperationException was unhandled by user code
Message="There was an error generating the XML document."
Source="System.Xml"
StackTrace:
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
at Pacer.PIA.UI.WindowsForms.Controls.Utility.Serialize(Object value) in E:\Projects\Indexing\Main\Source\Pacer.PIA\Source\Pacer.PIA.UI.WindowsForms\Controls\Utility.cs:line 55
at Pacer.PIA.UI.WindowsForms.Controller.MainForm.ActionLoad..ctor(Int32[] index, Object objValue) in E:\Projects\Indexing\Main\Source\Pacer.PIA\Source\Pacer.PIA.UI.WindowsForms\Controller\MainForm\ActionAdd.cs:line 37
at Pacer.PIA.UI.WindowsForms.MainForm.SearchLoadByLoadNumber(String loadNumber) in E:\Projects\Indexing\Main\Source\Pacer.PIA\Source\Pacer.PIA.UI.WindowsForms\Forms\MainForm.cs:line 3530
at Pacer.PIA.UI.WindowsForms.MainForm.rmedtLoadNumber_KeyPress(Object sender, KeyPressEventArgs e) in E:\Projects\Indexing\Main\Source\Pacer.PIA\Source\Pacer.PIA.UI.WindowsForms\Forms\MainForm.cs:line 1244
at Telerik.WinControls.RadItem.OnKeyPress(KeyPressEventArgs e)
at Telerik.WinControls.UI.RadTextBoxElement.textBoxItem_KeyPress(Object sender, KeyPressEventArgs e)
at Telerik.WinControls.RadItem.OnKeyPress(KeyPressEventArgs e)
at Telerik.WinControls.UI.RadTextBoxItem.TextBoxControl_KeyPress(Object sender, KeyPressEventArgs e)
at System.Windows.Forms.Control.OnKeyPress(KeyPressEventArgs e)
at Telerik.WinControls.UI.RadMaskTextBox.OnKeyPress(KeyPressEventArgs e)
at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WmKeyChar(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at Telerik.WinControls.UI.HostedTextBoxBase.WndProc(Message& message)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
InnerException: System.InvalidOperationException
Message="The type System.Drawing.Bitmap was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."
Source="niumy1xe"
StackTrace:
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write4_Image(String n, String ns, Image o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write5_BEDocument(String n, String ns, BEDocument o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write6_BERequirement(String n, String ns, BERequirement o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write8_BEMove(String n, String ns, BEMove o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write9_BELoad(String n, String ns, BELoad o, Boolean isNullable, Boolean needType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterBELoadCollection.Write10_ArrayOfBELoad(Object o)
InnerException:
班级:
[Serializable]
public class BELoadCollection : List<BELoad>, ICloneable
{
public BELoad FindByLoadId(string loadId)
{
return this.Find(load => load.LoadId.Equals(loadId));
}
public bool ExistsByLoadId(string loadId)
{
return this.Exists(load => load.LoadId.Equals(loadId));
}
public bool HasLoadsWithDocumentRequirementLinked
{
get
{
return this.Exists(load => load.HasDocumentsRequirementLinked);
}
}
public void PrepareRequirementsToIndex()
{
this.ForEach(load =>
{
load.PrepareRequirementsToIndex();
});
}
public bool HasLoadsReadyToIndex
{
get
{
return this.Exists(load => load.HasDocumentsRequirementReadyToIndex);
}
}
public BERequirementCollection GetRequirementsReadyToIndex()
{
BERequirementCollection beRequirementsReadyToIndex = new BERequirementCollection();
this.ForEach(load => beRequirementsReadyToIndex.AddRange(load.GetRequirementsReadyToIndex()));
return beRequirementsReadyToIndex;
}
#region ICloneable Members
object ICloneable.Clone()
{
return this.Clone();
}
public BELoadCollection Clone()
{
BELoadCollection BELoadCollectionClone = new BELoadCollection();
for (int i = 0; i <= this.Count - 1; i++)
BELoadCollectionClone.Add(this[i]);
return BELoadCollectionClone;
}
#endregion
}
这是 BELoad(只是字段)
public class BELoad : BEMetaData, ICloneable
{
//Fields
private BEMoveCollection beMoveCollection;
public string LoadId { get; set; }
public string Description { get; set; }
public string DocumentType { get; set; }
public string Vendor { get; set; }
public string VendorCityState { get; set; }
public string State { get; set; }
public string EquipmentPrefix { get; set; }
public string EquipmentNumber { get; set; }
public string Driver { get; set; }
public string Shipper { get; set; }
public string ShipperCityState { get; set; }
public string BillTo { get; set; }
public string BillToCityState { get; set; }
public string Consignee { get; set; }
public string ConsigneeCityState { get; set; }
public string Stop { get; set; }
public string StopCityState { get; set; }
public string Container { get; set; }
}
【问题讨论】:
-
任何嵌套类型都可以生成格式错误的 xml 吗?
-
格式错误的 xml 是什么意思?怎么会这样?
-
内部异常应该提供更多有用的信息。您能否发布异常的 ToString() 方法的完整结果(包括堆栈跟踪)?
-
请发布课程- 你读过这个msdn.microsoft.com/en-us/library/…
-
按照消息中所说的“不期望类型 System.Drawing.Bitmap。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。”
标签: c# serialization