using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using NetTopologySuite.Geometries;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public class IdentityUser<TKey>
public class User : IdentityUser<int>
public Point Location { get; set; }
public string Email { get; set; }
public string Username { get; set; }
public string Gender { get; set; }
public string DateOfBirth { get; set; }
public string Password { get; set; }
public string Created { get; set; }
public string LastActive { get; set; }
public string Introduction { get; set; }
public string LookingFor { get; set; }
public string City { get; set; }
public string Country { get; set; }
public double Longitude { get; set; }
public double Latitude { get; set; }
public List<Photo> Photos { get; set; }
public string url { get; set; }
public bool isMain { get; set; }
public string description { get; set; }
public static partial class JsonExtensions
public static T LoadFromFileWithGeoJson<T>(string path, JsonSerializerSettings settings = null)
var serializer = NetTopologySuite.IO.GeoJsonSerializer.CreateDefault(settings);
serializer.CheckAdditionalContent = true;
using (var textReader = new StreamReader(path))
using (var jsonReader = new JsonTextReader(textReader))
return serializer.Deserialize<T>(jsonReader);
public static partial class JsonExtensions
public static string SerializeWithGeoJson<T>(T obj, Formatting formatting = Formatting.Indented, JsonSerializerSettings settings = null)
var serializer = NetTopologySuite.IO.GeoJsonSerializer.CreateDefault(settings);
var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
serializer.Formatting = formatting;
serializer.Serialize(writer, obj);
public static T DeserializeWithGeoJson<T>(string json, Formatting formatting = Formatting.Indented, JsonSerializerSettings settings = null)
var serializer = NetTopologySuite.IO.GeoJsonSerializer.CreateDefault(settings);
serializer.CheckAdditionalContent = true;
using (var textReader = new StringReader(json))
using (var jsonReader = new JsonTextReader(textReader))
return serializer.Deserialize<T>(jsonReader);
public static void Test()
var fileName = "Question57172968_UserSeedData.json";
File.WriteAllText(fileName, GetJson());
TestDeserializeUsersFromFile(fileName);
static void TestDeserializeUsersFromFile(string fileName)
var users = JsonExtensions.LoadFromFileWithGeoJson<List<User>>(fileName);
var newJson = JsonExtensions.SerializeWithGeoJson(users);
Console.WriteLine("\nRe-serialized users: ");
Console.WriteLine(newJson);
static void TestSerializePoint()
var point = new Point(-122.4194155, 37.7749295) { SRID = 121 };
var settings = new JsonSerializerSettings
var serializer = NetTopologySuite.IO.GeoJsonSerializer.CreateDefault(settings);
var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
serializer.Serialize(writer, point);
Console.WriteLine("\nResult of serializing a {0}:", point);
Console.WriteLine("Actual version of {0} used: {1}.", NetTopologySuite.IO.GeoJsonSerializer.Create(), NetTopologySuite.IO.GeoJsonSerializer.Create().GetType().Assembly.FullName);
var converter = new NetTopologySuite.IO.Converters.GeometryConverter();
Console.WriteLine("{0}.CanConvert({1}) = {2}", converter, point.GetType(), converter.CanConvert(point.GetType()));
var newPoint = JsonExtensions.DeserializeWithGeoJson<Point>(sb.ToString());
Assert.IsTrue(newPoint.Equals(point));
""Email"": ""myemailaddress@gmail.com"",
""DateOfBirth"": ""1994-02-21"",
""Password"": ""password"",
""Created"": ""2017-08-02"",
""LastActive"": ""2017-08-02"",
""Introduction"": ""blah blah blah"",
""LookingFor"": ""blah blah blah"",
""City"": ""San Francisco"",
""Country"": ""United States"",
""Longitude"": -122.431297,
""Location"": {""type"":""Point"",""coordinates"":[-122.431297,37.773972]},
""url"": ""https://randomuser.me/api/portraits/women/3.jpg"",
""description"": ""Non deserunt labore sunt ex laboris et adipisicing ullamco officia minim.""
""Email"": ""myemailaddress@gmail.com"",
""DateOfBirth"": ""1994-02-21"",
""Password"": ""password"",
""Created"": ""2017-08-02"",
""LastActive"": ""2017-08-02"",
""Introduction"": ""blah blah blah"",
""LookingFor"": ""blah blah blah"",
""City"": ""San Francisco"",
""Country"": ""United States"",
""Longitude"": -122.431297,
""Location"": {""type"":""Point"",""coordinates"":[-122.431297,37.773972]},
""url"": ""https://randomuser.me/api/portraits/women/3.jpg"",
""description"": ""Non deserunt labore sunt ex laboris et adipisicing ullamco officia minim.""
public static void Main()
Console.WriteLine("Environment version: " + Environment.Version);
Console.WriteLine("Json.NET version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");