Serialize Strong Typed Collection. "There was an error reflecting type.."
-
Friday, February 03, 2006 2:37 AM
HI,
I have a class that looks like this:
[
Serializable] public class NewsItems : System.Collections.Generic.List<NewsItem>{
};
Any it works just fine for 99% of my needs... Here is the 1% problem, when I want to write out the contents of my collection to XML, I get the following error (pasted below) anyone know how to remedy this?
System.InvalidOperationException was unhandled
Message="There was an error reflecting type 'NewsItems'."
Source="System.Xml"
StackTrace:
at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel)
at System.Xml.Serialization.XmlReflectionImporter.ImportElement(TypeModel model, XmlRootAttribute root, String defaultNamespace)
at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type, XmlRootAttribute root, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
at Driver.Form1.button1_Click(Object sender, EventArgs e) in E:\eZamiRSS\Driver\Form1.cs:line 34
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Driver.Program.Main() in E:\eZamiRSS\Driver\Program.cs:line 17
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
All Replies
-
Friday, February 03, 2006 2:56 AM
Quick sanity check, is the NewsItem Serializable?
-
Friday, February 03, 2006 3:23 AM
Yes it is, (see below) unless there is another attrubute I need to add to the methods/fields/properties?
One thing I can say is when passed through web service, the newsitems is serialized just fine...
[
Serializable] public class NewsItem{
String publishDate; String originURL; String link; String comments; String title; String description; String feedID; String author; String rawXML; Dictionary<String, String> otherValues;[public get/set properties for each field is only other thing in class]
}
-
Saturday, February 04, 2006 12:58 PMWhat does the innerException say? (if more than 1 the innermost)
Generally that exception includes an inner exception that explains the problem more explicitly -
Tuesday, February 07, 2006 1:46 AM
Yes, I only dug down 1 level, and the inner had a inner, which said that the property I have of type Dictionary<String,String> was unserializable!
Thanks
-
Thursday, February 09, 2006 8:55 AMAha...I knew I had seen this somewhere else before. The SOAP/XML Serializer doesn't support Generics, the team will be implementing all of that jazz in WCF. See this thread for more info.
-
Wednesday, May 03, 2006 2:49 AMMike - The Xml Serializer and SOAP Serializer are not the same thing. The SOAP serailizer is really a formatter used for "deep" serialization, and can be used in remoting along with the binary formatter. The Xml Serializer is used to serialize/deserialize parameters passed to web methods. The Xml Serializer can handle generic collections in Framework 2.0, but it is not capable of serializing dictionaries (including generic ones).
-
Wednesday, May 03, 2006 4:02 AMI stand corrected. I guess its understandable why dictionaries would be difficult to support in XML.
-
Monday, December 31, 2007 5:39 PMOwner
Starting in .NET 3.0 you can use the DataContractSerializer instead. The DataContractSerializer supports generics and dictionaries. You can find a list of the types supports here: http://msdn2.microsoft.com/en-us/library/ms731923.aspx.
Daniel Roth
-
Thursday, October 28, 2010 6:21 AM
HI All,
I had similar situation when sending the object to MSMQ, but setting up queue formatter as
Queue.Formatter =
new BinaryMessageFormatter(); resolved above issue...
hope it helps,
HydPhani
HydPhani -
Thursday, October 28, 2010 9:51 PM
The problem is with one of the items you added to the dictionary - it is not serializable.
When the dictionary is empty - does serialization work?
http://webservices20.blogspot.com/
WCF Security, Interoperability And Performance Blog

