我有一个对象,我希望通过WCF服务发送,这需要能够序列化和对象,我可能不知道类型。我发现这对主要类型有效,但是对于引用类型,我无法成功地序列化这些值。在下面的测试中,我会在调试时尝试序列化List或Tuple对象时收到错误消息。有没有一种好的方法来执行这个过程而不知道类型?序列化未知对象到XML
[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);
}
这就是我的目标。我担心的是,由于对象类型未知,对象类型的序列化将失败。当我运行上面的代码时,我可以创建一个列表
告诉你实话我还没有在序列化方面取得太大的成功,当然客户不愿花时间让它正常工作,所以我通常会将这些信息作为XML发送到WebService,并让服务进行转换。它的大部分来自VS的预制WebService类结构,但工作。虽然由于臃肿的班级构建笨重,但工程。 – GoldBishop