0

カスタムオブジェクトを格納するArrayListがあります。そのArrayListを文字列にシリアル化して、アプリケーション設定内に保存できるようにします。

この質問はそれを解決するように見えますが、Javaです。そして、私はXMLに精通していないので、誰かが助けてくれるでしょうか? DateオブジェクトタイプのArrayListをシリアル化します

ArrayListを設定しました:

...
MyObject tempObj = new MyObject("something",1,"something");
MyCollection.Add(tempObj);
...

そして、私はもともとこれを持っていました。文字列を出力しますが、オブジェクトはありません:

    private string SerializeArrayList(ArrayList obj)
    {
            System.Xml.XmlDocument doc = new XmlDocument();
            Type[] extraTypes = new Type[1];
            extraTypes[0] = typeof(MyObject);
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), extraTypes);
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            try
            {
                serializer.Serialize(stream, obj);
                stream.Position = 0;
                doc.Load(stream);
                return doc.InnerXml;
            }
            catch { throw; }
            finally
            {
                stream.Close();
                stream.Dispose();
            }
}

編集:コードリクエスト

    public class MyObject
    {
        private string eN;      
        private Boolean bE;          
        private int min;         
        private Boolean bot;       
        private string onE;         


        public MyObject(string na, Boolean b)
        {
          ...
        }


        public MyObject()
        {
        }

        public string GetSomething()
        {
            ...
4

2 に答える 2

5

[Serializable]私はあなたのコードをテストしました、そしてあなたがあなたのオブジェクトにある限り、それはうまくいくようです。

また、フィールドをシリアル化しようとしている場合は、それらをパブリックプロパティにする必要があります。

私のテスト:

    ArrayList array = new ArrayList();
    Rules tempObj = new Rules { onE = "Value", min = 45, eN = "Value" };
    array.Add(tempObj);
    string result = SerializeArrayList(array);

    private string SerializeArrayList(ArrayList obj)
    {
        XmlDocument doc = new XmlDocument();
        XmlSerializer serializer = new XmlSerializer(typeof(ArrayList), new Type[]{typeof(Rules)});
        using (MemoryStream stream = new System.IO.MemoryStream())
        {
            try
            {
                serializer.Serialize(stream, obj);
                stream.Position = 0;
                doc.Load(stream);
                return doc.InnerXml;
            }
            catch (Exception ex)
            {
            }
        }
        return string.Empty;
    }

物体:

[Serializable]
[XmlType(TypeName = "Rules")]
public class Rules
{
    // Make fields propertys so they will be serialized
    public string eN { get; set; }      //Name
    public Boolean bE { get; set; }     //Whether blocked entirely
    public int min { get; set; }        //Minutes they are allowed if blocked
    public Boolean bot { get; set; }    //Create notification if allowance exceed
    public string onE { get; set; }     //Nothing or CLOSE Process

    public Rules(string na, Boolean b)
    {

    }

    public Rules()
    {
    }
}
于 2013-02-03T22:43:10.250 に答える
3

同様の問題が発生しました。Nugetから入手できるSharpSerializerと呼ばれるこのすばらしいプログラムがあります。ArrayListを非常に簡単に処理し、コードを入力するだけです。

 SharpSerializer mySerializer = new SharpSerializer();
 mySerializer.Serialize(ArrayList, "filetosaveto.xml");

これがウェブサイトへのリンクです。無料なので、何も支払う必要はありません。

http://www.sharpserializer.com/en/index.html

于 2013-02-03T20:54:58.987 に答える