У вас есть решение. Существует событие, называемое routeMatched, когда навигацию запускается каждый раз. Вы можете прикрепить событие на странице подробностей.
onInit : function () {
this._oRouter = sap.ui.core.UIComponent.getRouterFor(this);
this._oRouter.attachRouteMatched(this.handleRouteMatched, this);
},
handleRouteMatched : function (evt) {
//Check whether is the detail page is matched.
if (evt.getParameter("name") !== "detail") {
return;
//You code here to run every time when your detail page is called.
}
С уважением, Allen
Вот ссылка на статью, написанную ScottGu
Основываясь на ней, я написал некоторый код, который, как мне кажется, может быть полезен
public interface IEducationalInstitute
{
string Name
{
get; set;
}
}
public class School : IEducationalInstitute
{
private string name;
#region IEducationalInstitute Members
public string Name
{
get { return name; }
set { name = value; }
}
#endregion
}
public class Student
{
public IEducationalInstitute LocalSchool { get; set; }
public int ID { get; set; }
}
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int depth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = depth;
return serializer.Serialize(obj);
}
}
И вот как это можно назвать
School myFavSchool = new School() { Name = "JFK High School" };
Student sam = new Student()
{
ID = 1,
LocalSchool = myFavSchool
};
string jSONstring = sam.ToJSON();
Console.WriteLine(jSONstring);
//Result {"LocalSchool":{"Name":"JFK High School"},"ID":1}
Если я правильно понимаю, я не думаю, что вам нужно указывать конкретный класс, реализующий интерфейс для сериализации JSON.
Я тоже задавался этим вопросом, но боюсь, что это невозможно сделать.
Давайте посмотрим на это с другой стороны. Вы передаете JSon.net строку данных и тип для десериализации. Что должен сделать JSON.net, когда он столкнется с ISomething? Он не может создать новый тип ISomething, потому что ISomething не является объектом. Он также не может создать объект, реализующий ISomething, поскольку не знает, какой из множества объектов, наследующих ISomething, ему следует использовать. Интерфейсы - это то, что можно автоматически сериализовать, но не автоматически десериализовать.
Что бы я сделал, так это рассмотрел возможность замены ISomething базовым классом. Используя это, вы сможете добиться нужного эффекта.
Одна из вещей, которые вы можете сделать с Json.NET :
var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;
JsonConvert.SerializeObject(entity, Formatting.Indented, settings);
Флаг TypeNameHandling
будет добавьте свойство $ type
в JSON, которое позволяет Json.NET знать, в какой конкретный тип нужно десериализовать объект. Это позволяет десериализовать объект, по-прежнему выполняя интерфейс или абстрактный базовый класс.
Обратной стороной является то, что это очень специфично для Json.NET. $ type
будет полностью квалифицированным типом, поэтому, если вы сериализуете его с помощью информации о типе, десериализатор также должен понимать его.
Документация: Настройки сериализации с Json.NET