私には2つのクラスがあります...
[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);
ただし、オブジェクトの派生型は、リストの基本型インスタンス内に格納されます。Cはシリアル化できないため、WCFは逆シリアル化を試みて失敗するようです(無視済みとしてマークした場合でも)。クライアント側で応答がなく、サーバー側のメソッドが失敗します。
ただし、タイプ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);