簡體   English   中英

C#用戶配置文件內ArrayList內的自定義類型

[英]Custom Type within ArrayList inside of the user profile in C#

嘗試在用戶配置文件中的ArrayList中保存自定義類時出現以下錯誤:

生成XML文檔時出錯。 ---> System.InvalidOperationException:不應使用Com.xxx.MyDataClass類型。 使用XmlInclude或SoapInclude屬性可以指定靜態未知的類型。

我的web.config類似於:

<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider">
  <properties>
    <add name="MyData" type="System.Collections.ArrayList"/>
  </properties>
</profile>

我試圖將我的類(類似MyDataClass)存儲在ArrayList中的MyData中。 保存時,出現上述錯誤。 MyDataClass類目前只有兩個成員,都設置為“字符串”。

我假設我必須告訴類必須序列化自己,但是我不確定如何進行序列化。

這是課程:

namespace Com.xxxx.DataClasses
{
    public class MyDataClass : ISerializable
    {
        public string elem1;
        public string elem2;

        public string Elem1
        {
            get { return elem1; }
            set { elem1 = value; }
        }

        public string Elem2
        {
            get { return elem2; }
            set { elem2 = value; }
        }
....

更新:已修復

我可以通過以下方式解決此問題:

首先,這里是一個很好的資源: http : //msdn.microsoft.com/en-us/library/d8b58y5d.aspx

我將配置文件條目更改為:

<profile enabled="true" automaticSaveEnabled="false" defaultProvider="xxxxxxProvider">
  <properties>
    <add name="MyData" type="mypackage.MyDataClass" serializeAs="binary"/>
  </properties>
</profile>

然后創建MyDataClass以包含類似於MyDataClassInfo對象的List <>:

namespace Com.xxxx.DataClasses
{
    [Serializable]
    public class MyDataClass
    {
        List<MyDataClassInfo> myDataClassInfo;

        public MyDataClassInfo()
        {
            myDataClassInfo = new List<MyDataClassInfo>;
        }
        public List<MyDataClassInfo> MyDataClassInfo
        {
             get;
             set;
        }
    }


    [Serializable]
    public class MyDataClassInfo
    {
        public string elem1;
        public string elem2;

        public string Elem1
        {
            get { return elem1; }
            set { elem1 = value; }
        }

        public string Elem2
        {
            get { return elem2; }
            set { elem2 = value; }
        }
....

這里的關鍵是1)使用serializeAt =“ binary”和2)使用包含列表而不是配置文件中列表的類。

您永遠不要使用ArrayList類。 從.NET 2.0開始不推薦使用。

使用List<MyDataClass>代替。 它甚至可以為您解決此問題。

嘗試用SerializableAttribute裝飾MyDataClass。

namespace Com.xxxx.DataClasses
{
    [Serializable]
    public class MyDataClass
    {
        public string elem1;
        public string elem2;

        public string Elem1
        {
            get { return elem1; }
            set { elem1 = value; }
        }

        public string Elem2
        {
            get { return elem2; }
            set { elem2 = value; }
        }
    ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM