如何从 ASP.Net core 中的 Json 文件播种 NetTopologySuite.Geometries.Point 数据

2023-11-26

我想从我的种子文件中为我的用户对象播种“位置”数据

c# 对象,其中 Point 是NetTopologySuite.Geometries.Point是我的用户对象的一部分

  public class User: IdentityUser<int> {
      // member data here
      public Point Location { get; set; } // has lat/lng data points
  }

我在启动时通过执行类似的操作将数据播种到我的数据库

public void SeedUsers()
{
    if (!_userManager.Users.Any())
    {
        var userData = System.IO.File.ReadAllText("Data/UserSeedData.json");
        var users = JsonConvert.DeserializeObject<List<User>>(userData);

        var roles = new List<Role>
        {
            new Role{Name = "Member"},
            new Role{Name = "Admin"},
            new Role{Name = "Moderator"},
            new Role{Name = "VIP"},
        };

        foreach (var role in roles)
        {
            _roleManager.CreateAsync(role).Wait();
        }

        foreach (var user in users)
        {
            user.Photos.SingleOrDefault().IsApproved = true;
            _userManager.CreateAsync(user, "password").Wait();
            _userManager.AddToRoleAsync(user, "Member").Wait();
        }
     }
 }

使用像这样的 json 数组的 json 文件“UserSeedData.json”,我希望能够在其中粘贴某种代表 lng/lat 数据点的“位置”数据。

{
  "Email": "[email protected]",
  "Username": "Lola",
  "Gender": "female",
  "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,
  "Latitude": 37.773972,
  "Location": // something here!!!
  "Photos": [{
    "url": "https://randomuser.me/api/portraits/women/3.jpg",
    "isMain": true,
    "description": "Non deserunt labore sunt ex laboris et adipisicing ullamco officia minim."
  }]
}

现在我知道在我的种子方法中我可以做这样的事情,但我正在寻找一种方法将其包含在我的 .json 文件中,这样我就可以使用不同的数据点

foreach (var user in users)
{
    user.Photos.SingleOrDefault().IsApproved = true;
    user.Location = new Point(-122.4194155, 37.7749295) { SRID = 4326 };
    _userManager.CreateAsync(user, "password").Wait();
    _userManager.AddToRoleAsync(user, "Member").Wait();
}

网络拓扑套件有一个单独的 nuget,NetTopologySuite.IO.GeoJSON,用于使用 Json.NET 将 NetTopologySuite 类型从 JSON 序列化到 JSON。这包括转换器为了 几何对象,例如Point。如果您将此 nuget 添加到您的项目中,您将能够添加几何实体,例如Point到您的数据模型并直接(反)序列化模型。

为此,首先添加NetTopologySuite.IO.GeoJSON到你的项目。

然后添加以下扩展方法:

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);
        }
    }
}

并添加一个Location财产给你的User模型如你的问题:

public class User : IdentityUser<int>
{
    public Point Location { get; set; }

    // Remainder unchanged.
    // ...
}

现在,JSON 格式为Point好像:

{"type":"Point","coordinates":[-122.431297,37.773972]}

因此,编辑您的 JSON 文件,如下所示:

[
  {
    "Location": {
      "type": "Point",
      "coordinates": [
        -122.431297,
        37.773972
      ]
    },
    // Remainder unchanged

完成所有这些后,您将能够非常简单地反序列化 JSON 文件,如下所示:

var users = JsonExtensions.LoadFromFileWithGeoJson<List<User>>("Data/UserSeedData.json");

Notes:

  • NetTopologySuite.IO.GeoJSON 需要 Newtonsoft.Json 版本 9.0.1 或更高版本。如果您使用的是更高版本,您可能需要添加bindingRedirect以避免构建警告。

  • See 如何将 [NetTopologySuite.IO.GeoJSON] 与 ASP.NET Core 结合使用有关将此包集成到您的项目中的更多信息。

  • The SRID似乎没有保存为点 JSON 的一部分。相反,它是由IGeometryFactory反序列化时使用Point,默认情况下是new GeometryFactory(new PrecisionModel(), 4326);.

    如果您需要对此进行控制,您可以构造一个JsonSerializer使用特定工厂GeoJsonSerializer.Create(IGeometryFactory factory).

演示小提琴here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 ASP.Net core 中的 Json 文件播种 NetTopologySuite.Geometries.Point 数据 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 正则表达式删除开头的数字和 -

    我正在处理字符串列表 但我想更改字符串 以便它们对用户来说看起来不难看 一个示例列表是 2736162 Magazines 23 2311 Numbers 1 38122 Faces 5 231123 Newspapers 31 31235
  • Javascript和JQuery,如何验证select中是否存在选项元素?

    使用 JQuery 我尝试根据查询字符串在 select 元素中设置一个选项 这个问题类似于this 但是我仍然需要知道如何在执行选择之前检查元素是否存在 否则页面将不断刷新自身 请参阅下面的退出条件 获取查询字符串是使用函数 getPar
  • 当对象的属性被设置时调用函数

    我真的不知道如何解释这一点 但我会向您展示代码并告诉您我想要实现的目标 假设我制作了一个快速对象 var test 然后我为其设置一个属性 我insist在语法上 它不能使用任何函数作为设置器 test hello world 很简单 嗯
  • 数组下标的类型为“char”[-Wchar-subscripts]

    我正在尝试在辅助函数下面的帮助下删除前导 尾随空白字符 编译时我收到警告 数组下标的类型为 char Wchar subscripts 如何摆脱这个消息 char removeSpace char str char end Trim lea
  • jax-ws ri 2.2.1 没有为 amazon ecs wsdl 文件生成枚举

    我正在尝试为以下亚马逊 wsdl 生成工件 http webservices amazon com AWSECommerceService AWSECommerceService wsdl 使用以下 ant 任务
  • 当进程之间进行通信时,队列相对于管道有什么优势?

    使用 2 有什么优点 如果有的话 Queues over a Pipe进程之间进行通信 我打算使用multiprocessing蟒蛇模块 最大的胜利是队列是进程和线程安全的 管道则不然 如果两个不同的进程尝试从管道的同一端读取或写入 就会发
  • Angular2 - APP_BASE_HREF 与 HashLocationStrategy

    我有一个角度应用程序使用带有 HashLocationStrategy 的路由 我需要在主 html 文件中设置不同的值并在路由中设置不同的值 我尝试了这个解决方案 NgModule imports BrowserModule FormsM
  • 如何在 PHP 中将文件的内容分配给变量

    我有一个包含 HTML 标记的文档文件 我想将整个文件的内容分配给 PHP 变量 我有这行代码 body include email template php 当我做一个var dump I get string 1 是否可以将文件的内容分
  • 为什么 Codan 找不到 size_t

    我刚刚开始使用 Eclipse Indigo 来自 Galileo 每次使用 size t 时 我都会在排水沟中发现红色的小虫子 代码编译没有问题 但我怀疑我必须显式添加包含目录的路径 我已经在那里找到了通常的嫌疑人 我正在使用 Gnu 工
  • MySQL/PHP 错误:[2002] 通常只允许每个套接字地址(协议/网络地址/端口)使用一次

    我已经在 stackoverflow 上找不到这个问题的解决方案 大多数其他相关主题都与 Apache 未首先启动并出现此错误有关 我的问题是 在 apache 运行后 连接到我们的 php mysql 网站的一些用户将收到此错误 PHP
  • date.setHours() 不起作用

    我正在尝试使用 javascript 从给定的日期时间字符串中减去小时 我的代码是这样的 var cbTime new Date cbTime selectedTime setHours 5 5 Where selectedTime是给定的
  • 是否可以查询到不符合指定条件的数据?

    我正在为我的列表视图 android 获取用户列表 我使用 firebaselistadapter 来备份我的列表视图 我想显示除我的之外的用户数据 就像一个sql查询从用户表中选择一些东西 其中id userid 我想获取所有其他用户的数
  • 如何在 EF 6.1 CodeFirst 中的视图上添加导航属性

    让我们举一个例子来解释我的问题 MyTable1 id myTable2Id MyTable2 id MyView1 id myTable2Id 案例中存在MyView1 来自MyTable1的数据 现在我想从视图中的 EF6 1 代码优先
  • ember-cli 支持每个助手中的 Handlebars @vars(即 @index、@key、@first、@last)

    每当我有一个在每个助手内部使用 vars 变量 即 index key first last 的 Handlebars 模板时 我都会在 ember cli 中收到编译错误 看http handlebarsjs com iteration有
  • Visual Studio 2012 测试运行程序如何应用线程?

    每个包含测试的类是否在它自己的线程中运行 或者每个单独的测试都在它自己的线程中运行吗 如果每个包含测试的类都有自己的线程 那么它们是否同时运行 即 A 类测试是否会与 B 类测试同时运行 或者 A 类的测试会先运行 每个测试都在自己的线程上
  • Jquery 如果复选框被选中 Bootstrap 开关

    我使用 Bootstrap 开关插件使我的复选框看起来像开关按钮 我需要检查该复选框是否在 jQuery 中被选中 我在谷歌上搜索了很多 尝试了一些建议和代码片段 但没有成功 我认为我发现的最干净的代码是 checkbox attr che
  • Rust 中通用结构的向量

    我正在 Rust 中创建一个实体组件系统 并且我希望能够存储Vec每个不同的组件Component type pub trait Component struct ComponentList
  • 向折线图添加点和值...如何像线一样为点着色?

    我从多行示例开始http bl ocks org mbostock 3884955我将其扩展以显示沿线的点 但我无法为圆圈提供与线相同的颜色 我是 d3 js 的新手 我真的需要建议 这里是示例页面 http www danielepenn
  • PHP true 和 'true' 的区别

    快问 之间有区别吗 success true and success true 我知道他们不是 彼此都有 但是使用它们有区别吗 编辑 我发现在查看 success 是否为 false 时使用 而不是 解决了我的问题 我现在的问题是 我应该在
  • 如何从 ASP.Net core 中的 Json 文件播种 NetTopologySuite.Geometries.Point 数据

    我想从我的种子文件中为我的用户对象播种 位置 数据 c 对象 其中 Point 是NetTopologySuite Geometries Point是我的用户对象的一部分 public class User IdentityUser