2017-04-08 12 views
0

これはスタック上の多くの場所に回答されており、可能な限り最良の回答はHereです。私はそれと他の多くの答えも試してみました。私は私のインターフェイスのコレクションを返すライブラリ(IMasterAutoSuggestOutletICollectionを<Interface>からICollectionに変換する<Class> [UWP] c#6.0

public interface IMasterAutoSuggestOutlet : IBaseAutoSuggestOutlet 
{ 
    IAddressData AddressData { get; } 

    IPlaceActivity PlaceActivity { get; } 

    string ELoc { get; } 

    Geopoint ExactLocation { get; } 

    Geopoint EntranceLocation { get; } 

    LocationType TypeOfLocation { get; } 
} 

を持っている今、私は自分のアプリケーション内の別のページからこのインタフェースデータを転送します。

私の具象クラス、

である私は何をしたい
public class MasterAutoSuggestModel : IMasterAutoSuggestOutlet 
{ 
    public IAddressData AddressData { get; set; } 

    public IPlaceActivity PlaceActivity { get; set; } 

    public string ELoc { get; set; } 

    public Geopoint ExactLocation { get; set; } 

    public Geopoint EntranceLocation { get; set; } 

    public LocationType TypeOfLocation { get; set; } 
} 

は、ICollectionへのICollectionを変換します。インタフェースはシリアル化することはできませんので、私はこのインタフェースを実装する具象クラスを作成しました。私のコードは以下のような操作の私の実装を示しています

var collection = mainPageViewModel?.SearchPageVM?.searchManager?.AutoSuggestResponse; 
var ob = collection.First(); 
if (ob is IMasterAutoSuggestOutlet) 
{ 
    var ToBeTransfered = collection.OfType<MasterAutoSuggestModel>(); //Simply returns the collection with a count 0 
    var serializedData = JsonConvert.SerializeObject(ToBeTransfered); 
    ScenarioFrame.Navigate(typeof(MasterSearchResultPage), serializedData); 
} 

問題は、それは私にcollectionは、その中に10個のアイテムを持っているにもかかわらず、カウント0のコレクションを返しますvar ToBeTransfered = col.OfType<MasterAutoSuggestModel>();です。

誰かが間違っていますか?次のページに送信するために、この変換されたコレクションをシリアル化してナビゲーションパラメータとして送信する必要があります。

答えて

0

指定されたタイプで接続をフィルタリングします。他のライブラリからオブジェクトを取得している場合は、その特定のタイプではありません。 https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx

おそらく、ライブラリから取得したアイテムをシリアル化のためにdtoに変換することをお勧めします。あなたは、私がこのケースでは性質がたくさん少ないですが、わずか6の特性よりも多いとき何が起こるので、手動でプロパティを設定すると、正しいアプローチであることを確認していない変換

if (ob is IMasterAutoSuggestOutlet) { 
    var transferObject = new MasterAutoSuggestModel(){ 
     //Set Properties 
    } 
    // var ToBeTransfered = collection.OfType<MasterAutoSuggestModel>(); //Simply returns the collection with a count 0 
    var serializedData = JsonConvert.SerializeObject(transferObject); 
    ScenarioFrame.Navigate(typeof(MasterSearchResultPage), serializedData); } 
+0

ためautomapperのようなものを使用することができますか? –

+0

AutoMapperのようなものがあります –

+0

オートマナーナゲットをインストールするか、ライブラリをインポートしてマップを作成する方法はありますか?私ができる明示的なキャストはありますか?または同じの拡張メソッドを記述する? –

関連する問題