关于c#:转换ICollection<接口>

Convert ICollection<Interface> to ICollection<Class> [UWP] c#6.0

我知道这个问题已经得到了很多答案,最好的答案就在这里。我试过了,还有很多其他的答案。我有一个库,它向我返回一个接口集合(IMasterAutoSuggestOutlet)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface IMasterAutoSuggestOutlet : IBaseAutoSuggestOutlet
{
    IAddressData AddressData { get; }

    IPlaceActivity PlaceActivity { get; }

    string ELoc { get; }

    Geopoint ExactLocation { get; }

    Geopoint EntranceLocation { get; }

    LocationType TypeOfLocation { get; }
}

现在,我想在我的应用程序中将这个接口数据从一个页面传输到另一个页面。由于接口无法序列化,我创建了一个实现此接口的具体类:

我的混凝土课,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。下面的代码显示了这种操作的实现:

1
2
3
4
5
6
7
8
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);
}

问题出在var ToBeTransfered = col.OfType();上,它返回一个计数为0的集合,即使collection中有10个项目。

有人能告诉我哪里出了问题吗?请注意,我需要使用此转换的集合进行序列化,并将其作为导航参数发送到下一页


OfType方法按指定的类型筛选连接。如果您正在从其他库中检索对象,它们将不是那个特定的类型。https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx

您可能想做的是将从库中检索到的项目转换为DTO进行序列化。您可以使用类似automapper的东西进行转换

1
2
3
4
5
6
7
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); }