.net 为什么';XmlSerializer是否序列化我的数组?

.net 为什么';XmlSerializer是否序列化我的数组?,.net,xml,xmlserializer,.net,Xml,Xmlserializer,我是XmlSerializer的新手。我编写了一个小类来保存数据库中的条目: [Serializable] public struct Entry { public string artkey, lid, request, status, requestdate; } 很简单,对吧?将这些列表序列化应该是小菜一碟 我有一个函数,它可以编译这些函数的列表。要序列化列表,请尝试以下代码: XmlSerializer serializer = new XmlSerializer(typeof

我是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>
System.InvalidOperationException:生成XML文档时出错。-->System.InvalidCastException:指定的强制转换无效。
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterEntry.Write3_条目(对象o)中
---内部异常堆栈跟踪的结束---
位于System.Xml.Serialization.XmlSerializer.Serialization(XmlWriter XmlWriter,对象o,XmlSerializerNamespaces名称空间,字符串编码样式,字符串id)
位于System.Xml.Serialization.XmlSerializer.Serialize(流、对象o、XmlSerializerNamespaces)
位于System.Xml.Serialization.XmlSerializer.Serialize(流,对象o)
在CCB_请求时。xmlResponse_从CCB_请求中选择(HttpResponse响应)
在CCB_Requests.ProcessRequest(HttpContext上下文)

看来我一定是犯了个简单的错误。如何解决此问题?

如果要序列化
条目的数组,请将
XmlSerializer的初始化更改为:

// typeof(Entry) ==> typeof(Entry[])
XmlSerializer serializer = new XmlSerializer(typeof(Entry[]));

将此作为wiki编写,因为它不会回答问题,但会显示如何编写此类型:

public class Entry
{
    [XmlElement("artKey")]
    public string ArtKey {get;set;}

    // etc
}
出于某些原因,请参阅我添加到qestion的注释。如果您的条目为Null或处于错误状态,则它将显示InvalidCastException,因此除了使用GetType()方法之外,该方法将提供与by typeof()相同的输出


顺便说一句,公共领域:坏;可变结构:坏;实体的结构:错误。。。这应该是一个具有propertiesOh的类,[Serializable]不会影响XML序列化。但是底部的右大括号很好:)如果这是一个具有属性的类,这会有多好?
struct
在c#中并不表示“基本对象”;它有一个非常具体的含义,不是这样的。易变结构因引起奇怪的数据问题而臭名昭著,人们对其复制语义并不十分期待。它也是超大的;结构对于小值是有效的;这有多个引用。公共字段打破了封装和抽象的所有规则。我需要继续!扭转这个问题;如果您不能清楚地说明为什么它是一个结构,那么默认为类。在c#中,使用stuct是一个常见的错误,因为类型是“简单的”,但这与struct的实际用途相差甚远,坦率地说,我不得不回答很多问题:“为什么它不能像我预期的那样工作?”“因为它真的不应该是struct”。老实说,这应该是一个类。您的答案排除了异常,但结果只是所有数据库条目的拼贴,没有XML标记。我需要在我的类上添加一些属性才能使其工作吗?哦,请划掉最后的评论。我只是看不到XML标记,因为我在一个解释为HTML的浏览器中查看它!
   Entry e = new Entry();
            e.artkey = "as";
            e.lid = "lid";
            e.request = "request";
            e.requestdate = "req  uesteddate";
            e.GetType();
    try(e!=null)
    {
         XmlSerializer serializer = new XmlSerializer(e.GetType());
    }