将ICollection <interface>转换为ICollection <class> [UWP] c#6.0

时间:2017-04-08 07:52:44

标签: c# interface uwp

我知道这已经在堆栈上找到了很多地方,最好的答案是Here。我已经尝试过了很多其他答案。我有一个库,它返回一个接口(IMasterAutoSuggestOutlet

的集合
public interface IMasterAutoSuggestOutlet : IBaseAutoSuggestOutlet
{
    IAddressData AddressData { get; }

    IPlaceActivity PlaceActivity { get; }

    string ELoc { get; }

    Geopoint ExactLocation { get; }

    Geopoint EntranceLocation { get; }

    LocationType TypeOfLocation { get; }
}

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

我的具体课程,

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);
}

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

有人可以告诉我哪里出错了吗?请注意我需要使用此Converted集合来序列化并作为导航参数发送以发送到下一页

1 个答案:

答案 0 :(得分:0)

ofType方法按指定的类型过滤连接。如果要从其他库中检索对象,则它们不是特定类型。 https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx

您可能想要做的是将从库中检索到的项目转换为dto进行序列化。你可以使用像automapper这样的东西进行转换

<div class="card">
</div>
<div class="card">
</div>
<script src="http://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous">
</script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js">
</script>