Ошибка преобразования типа IPoint в JSON

126
18 февраля 2021, 10:10

В таблице базы данных PostgreSQL есть столбец (nodeCoordinates) где хранятся координаты (тип geography). Данный столбец связан с моделью в приложении ASP.NET Core MVC:

[Column("nodeCoordinates", TypeName = "geography (point)")]
public IPoint NodeCoordinates { get; set; }

При запросе с помощью EF Core данные загружаются без проблем:

Node node = await _context.Node
.Select(n => new Node
{
     IdNode = n.IdNode,
     NodeCoordinates = n.NodeCoordinates
})
.FirstOrDefaultAsync(n => n.IdNode == id);

То есть в поле NodeCoordinates переменной node есть координаты:

Но при возврате Json:

return Json(node);

Возникает ошибка: SyntaxError: JSON.parse: end of data after property value in object at line 1 column 215 of the JSON data

Необработанные данные выглядят так: {"idNode":695, "nameNode":null, "idTypeNode":null, "idStation":0, "barCodeNode":null, "nodeCoordinates":{"coordinateSequence":{"dimension":3,"ordinates":7,"count":1},"coordinates":[{"x":65.29806667,"y":55.4389,"z":"NaN"

То есть нет закрывающихся скобок. Почему так происходит? Какой тип нужно использовать, чтобы возвращать Json с координатами?

Выяснилось, что так происходит из-за циклической ссылки. Ошибка: Self referencing loop detected for property 'CoordinateValue' with type 'GeoAPI.Geometries.Coordinate'

Данные которые приходят из БД:

Проблема решается игнорированием циклических ссылок при сериализации:

            string nodeJSON = JsonConvert.SerializeObject(node,
            new JsonSerializerSettings()
            {
                ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
            });

Но непонятно почему так происходит.

READ ALSO
Как дублировать картинку?

Как дублировать картинку?

есть PictureBox1 который расположен на форме и он производит движение по таймеру

140
Освобождение ресурсов в деструкторе C#

Освобождение ресурсов в деструкторе C#

В конструкторе объекта класса осуществляется подключение к БД MySQL, в деструкторе подключение закрываетсяДопустимо ли подобное в C#?

115
Парсинг одинаковых тегов в HtmlAgilityPack

Парсинг одинаковых тегов в HtmlAgilityPack

Моя проблема заключается в том, что у меня есть несколько тегов и они одинаковыеМне необходимо сделать парсинг первого тега из этих нескольких...

106
Раздельные логи микросервисов

Раздельные логи микросервисов

У меня микросервисное API на dotnet core 22 Изучал и брал в пример: https://github

134