#list #xamarin #casting #realm #geojson
Вопрос:
В основном я пытаюсь сохранить GeoJSON в моей БД области моего Xamarin.Формирует приложение и имеет свойство, как указано ниже (вложенный список двойных)
public class GeoJSONGeometry : RealmObject
{
public string Type { get; set; }
public IList<IList<IList<double>>> Coordinates { get; }
}
Но попытка создать приложение приводит к следующей ошибке:
Fody/Область: геойсонгеометрия.Координаты-это список IList, но его общий тип-IList`1, который не поддерживается областью.
Пожалуйста, подскажите, как с этим можно справиться.
Обновление: Я использовал приведенный ниже код для замены исходного, и ошибка исчезла. Пожалуйста, предложите, есть ли какая-либо альтернатива
public class DoubleList : RealmObject
{
public IList<double> Coordinates { get; }
}
public class ListOfDoubleList : RealmObject
{
public IList<DoubleList> CoordinatesList { get; }
}
public class GeoJSONGeometry : RealmObject
{
public string Type { get; set; }
public IList<ListOfDoubleList> CoordinatesListGroup { get; }
}
Комментарии:
1. Можете ли вы поделиться своим примером объекта полезной нагрузки GeoJSON (json).
2. @Anurag Пожалуйста, найдите образец, приведенный ниже: [{ «тип»: «Объект», «свойства»: {«партия»: «Республиканская»}, «геометрия»: { «тип»: «Полигон», «координаты»: [[ [-104.05, 48.99], [-97.22, 48.98], [-96.58, 45.94], [-104.03, 45.94], [-104.05, 48.99] ]] } }]
3. Вы пробовали использовать строку (при сохранении области) вместо вложенного списка и разбора при использовании пользовательского интерфейса.
4. @Anurag Нет, я еще не пробовал этого. Я тоже попробую это сделать. В качестве альтернативы, есть ли какой-либо способ сохранить массив в том виде, в каком он есть (в формате JSON) в области?
Ответ №1:
Ваш подход верен, главное, что я бы предложил, это использовать EmbeddedObject
, а не RealmObject
для базового класса этих промежуточных объектов:
public class DoubleList : EmbeddedObject
{
public IList<double> Coordinates { get; }
}
public class ListOfDoubleList : EmbeddedObject
{
public IList<DoubleList> CoordinatesList { get; }
}
public class GeoJSONGeometry : RealmObject
{
public string Type { get; set; }
public IList<ListOfDoubleList> CoordinatesListGroup { get; }
}
Это приводит к введению семантики владения GeoJSONGeometry
вплоть до DoubleList
, что означает, что если вы удалите объект геометрии из области, он также удалит все ListOfDoubleList
объекты, содержащиеся в CoordinatesListGroup
свойстве, что, в свою очередь, удалит все DoubleList
объекты, которые содержались в ListOfDoubleList.CoordinatesList
нем .