C# MongoDB GeoJsonPoint JSON Объект - PullRequest
0 голосов
/ 23 марта 2020

У меня проблема с структурированием моего геолокационного объекта в моем приложении ASP. NET Core 3 с использованием mongodb.driver

Мой объект

public class Person
{
    [BsonId]
    public ObjectId Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string PhoneNumber { get; set; }
    public GeoJsonPoint<GeoJson2DGeographicCoordinates> Location { get; set; }
}

I Я просто делаю прямую вставку и передаю объект. Если я опущу местоположение, оно вставит найти.

Вот объект JSON, который я пытаюсь передать в API в простом сообщении.

{
"firstName": "Paul",
"lastName": "Staley",
"email": "someemail@nowhere.com",
"address": "12345 E 1st Ave",
"state": "AA",
"zipCode": "11111",
"phoneNumber": "555-555-5555",
"location":  {

    "coordinates": [
        0.123321,
        0.3453455
    ]
}

}

Ошибка, которую я получаю.

System.NotSupportedException: Десериализация ссылочных типов без конструктора без параметров не поддерживается. Тип 'MongoDB.Driver.GeoJsonObjectModel.GeoJsonPoint`1 [MongoDB.Driver.GeoJsonObjectModel.GeoJson2DGeographicCoordinates]'

1 Ответ

0 голосов
/ 28 марта 2020

Ответ помог Nksoi

Персона Объект

 public class Person
 {
    [BsonId]
    public ObjectId Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string PhoneNumber { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public GeoJsonPoint<GeoJson2DGeographicCoordinates> Location
    { get; private set; }
    public void SetLocation(double lon, double lat) => SetPosition(lon, lat);


    private void SetPosition(double lon, double lat)
    {
        Latitude = lat;
        Longitude = lon;
        Location = new GeoJsonPoint<GeoJson2DGeographicCoordinates>(
            new GeoJson2DGeographicCoordinates(lon, lat));
    }
}

Контроллер

 [HttpPost]
    public IActionResult CreatePerson(Person person)
    {
        person.SetLocation(person.Longitude, person.Latitude);
        _personRepository.CreatePerson(person);

        return Ok();
    }

JSON Объект

 "firstName": "Paul",
 "lastName": "Staley",
 "email": "someemail@nowhere.com",
 "address": "12345 E 1st Ave",
 "state": "AA",
 "zipCode": "11111",
 "phoneNumber": "555-555-5555",
 "latitude": 32.0,
 "longitude": 91.0
...