Как объявить вложенное свойство IList для объекта области без получения ошибки «не поддерживается»?

#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 нем .