J’ai un ArrayList qui stocke un object personnalisé. Je veux sérialiser cet ArrayList en une chaîne afin de pouvoir l’enregistrer dans les parameters de l’application.
Cette question cherche à le résoudre, mais est en Java. Et je ne suis pas intelligent avec XML, alors quelqu’un pourrait-il aider? Sérialiser un type d’object ArrayList of Date
J’ai ma configuration ArrayList:
... MyObject tempObj = new MyObject("something",1,"something"); MyCollection.Add(tempObj); ...
Et j’avais à l’origine ça. Il sort la chaîne, mais l’object n’y est pas:
private ssortingng 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(); } }
EDIT: demande de code
public class MyObject { private ssortingng eN; private Boolean bE; private int min; private Boolean bot; private ssortingng onE; public MyObject(ssortingng na, Boolean b) { ... } public MyObject() { } public ssortingng GetSomething() { ...
J’ai testé votre code et il semble bien fonctionner tant que vous avez [Serializable]
sur votre object.
De plus, si vous essayez de sérialiser les champs, vous devrez les rendre propriétés publiques.
Mon test:
ArrayList array = new ArrayList(); Rules tempObj = new Rules { onE = "Value", min = 45, eN = "Value" }; array.Add(tempObj); ssortingng result = SerializeArrayList(array); private ssortingng 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 ssortingng.Empty; }
Objet:
[Serializable] [XmlType(TypeName = "Rules")] public class Rules { // Make fields propertys so they will be serialized public ssortingng 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 ssortingng onE { get; set; } //Nothing or CLOSE Process public Rules(ssortingng na, Boolean b) { } public Rules() { } }
J’ai rencontré un problème similaire, et il existe un excellent programme appelé SharpSerializer, disponible via Nuget. Il va manipuler votre ArrayList assez facilement, tapez simplement le code:
SharpSerializer mySerializer = new SharpSerializer(); mySerializer.Serialize(ArrayList, "filetosaveto.xml");
Voici le lien vers le site Web, c’est gratuit, alors ne vous inquiétez pas pour payer quoi que ce soit: