クラスは一旦IEnumerable
それのリストをシリアライズするには、IEnumerable
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using SUtils.Serialization; using SUtils.Serialization.MsgPack; namespace CsCosnole { class Data { public int value; public string str; public Data(int n, string s) { value = n; str = s; } } class Program { static void Deserialize() { using (FileStream stream = new FileStream(@"C:\output_data.mpac", FileMode.Open)) { ISerializationProvider serializer = new MsgPackSerializationProvider(); SerializableValue obj = serializer.Deserialize(stream); foreach (SerializableValue i in obj.ArrayItems) { int value = (int)i[0]; string name = (string)i[1]; Console.WriteLine("{0}, {1}", value, name); } } } static IEnumerable<SerializableValue> DataToList(Data data) { yield return (SerializableValue)data.value; yield return (SerializableValue)data.str; } static void Serialize() { ISerializationProvider serializer = new MsgPackSerializationProvider(); List<Data> ls = new List<Data>() { new Data(1, "a"), new Data(2, "b"), new Data(3, "c") }; IEnumerable<SerializableValue> datas = ls.Select(x => new SerializableValue(DataToList(x))); using (FileStream stream = new FileStream(@"C:\output_data.mpac", FileMode.CreateNew)) { serializer.Serialize(stream, new SerializableValue(datas)); } } static void Main(string[] args) { Serialize(); Deserialize(); } } }
1, a 2, b 3, c
めんどくさいですが、できました。