kullanırken 'System.Linq.Enumerable ...' türünde bir parametre serileştirilemiyor Bir WCF Hizmetim var. Bir Sözlük'ten seçmek için Linq nesnelerini kullanır. nesne türü basit:WCF, LINQ, JSON
public class User
{
public Guid Id;
public String Name;
}
bir Dictionary<Guid,User>
saklanan koleksiyonu vardır.
Böyle bir WCF OperationContract
yöntemine sahip istiyorum: O iyi derler
public IEnumerable<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return selection;
}
, ancak bunu çalıştırdığınızda alıyorum:
Sunucu isteği işlerken bir hatayla karşılaştı. Kural dışı durum iletisi, '' System.Linq.Enumerable + WhereSelectEnumerableIterator
2[Cheeso.Samples.Webservices._2010.Jan.User,System.Guid]' (for operation 'GetAllUsers', contract 'IJsonService') because it is not the exact type 'System.Collections.Generic.IEnumerable
1 [System.Guid] 'türünde parametre imzasını seri hale getiremez ve bilinen türler koleksiyonunda yoktur. Parametreyi serileştirmek için, ServiceKnownTypeAttribute kullanarak işlem için bilinen türler koleksiyonuna yazın. '. Daha fazla bilgi için sunucu günlüklerine bakın.
Seçimi IEnumerable<Guid>
olmak için nasıl zorlayabilirim? Bunu yapmak için kodunu değiştirmek durumunda
DÜZENLEME
, iyi çalışıyor - iyi çalışabilirliği.
public List<Guid> GetAllUsers()
{
var selection = from user in list.Values
select user.Id;
return new List<Guid>(selection);
}
beni List<T>
yaratılması/örnekleme önlemek için bir yol var mı?
Sanırım bir IEnumerable iletmeye çalışıyorum. Teslim etmek istediğim şey, Kılavuzların listesi. ama bunun gerçekleşmesi için gereksiz döküm yapmak istemedim. Aslında, yöntemin dönüş türünü yalnızca Liste listesine dönüştürebilir ve sonra listeyi Liste oluşturucuya geçiren yeni bir Liste oluşturabilirim - bu yalnızca iyi çalışır ve istemci listeyi istediğim gibi alır. Yeterince basit. Listesinin açık yaratılmasının gereksiz olacağını umuyordum. –
Cheeso
IEnumerable <> sadece bir arabirimdir ve yöntemin döndürdüğü IEnumerable <> özelliğini kullanan başlatılmış türüne bağlı olduğu için birlikte çalışabilir olmadığını söylemek tamamen doğru değildir. IEnumerable <> 'ı herhangi bir sorun olmadan servis işlemlerinden dönüş olarak kullandım, ancak anahtar operasyonun geri dönüş değerinin düzgün bir şekilde başlatılması gerektiğidir. – Kwal
MattK - bir IEnumerable ile sonuçlanan bir sorguyu gerçekleştirmek için linq-to-nesnelerini WCF'ye maruz bırakılmış bir yöntemden dönebileceğim şekilde nasıl kullanabilirim? –
Cheeso