我有两节课...
[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);