【发布时间】:2011-11-15 20:45:24
【问题描述】:
我有两个课...
[Serializable]
[DataContract]
public class A
{
[DataMember]
public string _a { get; set; }
[DataMember]
public bool _b { get; set; }
}
[Serializable]
public class B : A
{
[NonSerialized]
[XmlIgnore]
private C _c;
}
...而且我有 WCF 服务:
public interface IClient
{
[ServiceKnownType(typeof(A))]
[OperationContract(IsOneWay = true)]
void Somefunction(List<A> listofA);
}
我需要向客户发送一个 A 的列表,但我只有一个 B 的列表。我不关心“_c”字段。我会认为这很简单:
List<A> listofA = new List<A>();
foreach (B instanceofb in somestore.Values)
{
listofA.Add((A)instanceofb);
}
Client.Somefunction(listofA);
但对象的派生类型存储在列表中的基类型实例中。 WCF 似乎试图反序列化并失败,因为 C 不可序列化(即使我已将其标记为已忽略)。我在客户端没有得到响应,服务器端的方法就失败了。
但我可以创建和发送(并在客户端接收)类型 A:
List<A> listofA = new List<A>() { new A() };
Client.Somefunction(listofA);
还有什么方法可以让你畏缩不前(可行):
public A Convert(B _instanceofb)
{
A _instanceofA = new A();
A._a = _instanceofb._a;
A._b = _instanceofb._b;
return A;
}
和..
List<A> listofA = new List<A>();
foreach (B instanceofb in somestore.Values)
{
listofA.Add(Convert(instanceofb));
}
Client.Somefunction(listofA);
【问题讨论】:
-
编辑请注意 - 如果您认为所提供的 sn-ps 错误,请使用更正的代码添加答案,而不是更正问题。
标签: wcf serialization base derived upcasting