WCFサービスを介して送信したいオブジェクトがあります。これは、シリアル化できる必要があり、タイプがわからない可能性のあるオブジェクトです。これはプリミティブ型で機能することがわかりますが、参照型では値を正常にシリアル化できません。以下のテストでは、リストオブジェクトまたはタプルオブジェクトのいずれかをシリアル化しようとすると、デバッグ中にエラーメッセージが表示されます。タイプを知らなくてもこのプロセスを実行する良い方法はありますか?
[DataContract]
public class SizingObject
{
[DataMember]
public List<SizingItem> SizingItems { get; set; }
}
[DataContract]
public class SizingItem
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Value { get; set; }
[DataMember]
public string Unit { get; set; }
[DataMember]
public string ListItemId { get; set; }
[DataMember]
public object Item { get; set; }
}
var i = new SizingObject();
i.SizingItems = new List<SizingItem>();
i.SizingItems.Add(new SizingItem
{
Item = "String",
ListItemId = string.Empty,
Name = "string item",
Unit = string.Empty,
Value = string.Empty
});
i.SizingItems.Add(new SizingItem
{
Item = 0.23,
ListItemId = string.Empty,
Name = "double item",
Unit = string.Empty,
Value = string.Empty
});
i.SizingItems.Add(new SizingItem
{
Item = new List<double> { 3, 4, 5, 6 },
ListItemId = string.Empty,
Name = "list<double> item",
Unit = string.Empty,
Value = string.Empty
});
i.SizingItems.Add(new SizingItem
{
Item = new Tuple<string, double>("TupleItem", 2.00),
ListItemId = string.Empty,
Name = "Tuple<string, double> item",
Unit = string.Empty,
Value = string.Empty
});
// Serialize User Data
var stringWriter = new StringWriter();
var serializer1 = new XmlSerializer(typeof(SizingObject));
serializer1.Serialize(stringWriter, i);
var xml = stringWriter.ToString();
var serializer2 = new XmlSerializer(typeof(SizingObject));
i = (SizingObject)serializer2.Deserialize(new StringReader(xml));
var dict = new Dictionary<Type, Func<object, object>>();
dict.Add(typeof(string), e => e as string);
dict.Add(typeof(double), e => e);
dict.Add(typeof(List<double>), e => e as List<double>);
dict.Add(typeof(Tuple<string, double>), e => e as Tuple<string, double>);
foreach (var item in i.SizingItems)
{
var result = dict[item.Item.GetType()].Invoke(item.Item);
}