【发布时间】:2011-03-30 15:53:56
【问题描述】:
我是 XmlSerializer 的新手。我写了一个小类来保存数据库中的条目:
[Serializable]
public struct Entry
{
public string artkey, lid, request, status, requestdate;
}
够简单吧?序列化这些列表应该是小菜一碟。
我有一个编译这些列表的函数。为了序列化我的列表,我尝试了以下代码:
XmlSerializer serializer = new XmlSerializer(typeof(Entry));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
serializer.Serialize(ms, entries.ToArray());
ms.WriteTo(Response.OutputStream);
此代码打印以下异常:
<error>System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidCastException: Specified cast is not valid.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterEntry.Write3_Entry(Object o)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o)
at CCB_Requests.xmlResponse_selectFromCcb_Requests(HttpResponse response)
at CCB_Requests.ProcessRequest(HttpContext context)</error>
看来我一定是犯了一个简单的错误。我该如何解决这个问题?
【问题讨论】:
-
顺便说一句,公共领域:不好;可变结构:不好;实体的结构:不好......这应该是一个具有属性的类
-
哦,[Serializable] 不会影响 XML 序列化。但是底部的右大括号很好:)
-
如果这是一个有属性的类会更好吗?
-
struct在 c# 中并不意味着“基本对象”;它有一个非常具体的含义,不是这个。可变结构臭名昭著会导致奇怪的数据问题,人们不太期待它们的复制语义。它也是超大的; 对于小值,结构是有效的;这有多个参考。公共字段打破了所有封装和抽象的规则。我需要继续! -
扭转这个问题;如果您不能清楚地 说明它为什么是结构,则默认为类。在 c# 中使用 stuct 是一个常见的错误,因为类型是“简单的”,但这与 struct 的真正使用相去甚远,坦率地说,我我不得不回答很多“为什么这不像我期望的那样工作?” “因为那真的不应该是一个结构”。老实说,那应该是一堂课。
标签: .net xml xmlserializer