微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析JSON数组以建模.NET Core导致空集

如何解决解析JSON数组以建模.NET Core导致空集

通过调用DbSet<T>.FromsqlRaw(),我可以在数据库调用存储过程,该存储过程返回如下结果集:

Id VARCHAR(36)
FirstName VARCHAR(255)
LastName VARCHAR(255) NULL
Email VARCHAR(255) NULL
Numbers VARCHAR(?) NULL

Numbers一个VARCHAR字段,其中包含SearchContactsNumber的JSON数组:

public sealed class SearchContactsNumber
{
    public Guid IdNumber { get; set; }
    public string Type { get; set; }
    public string Number { get; set; }
}

例如,结果集可能像这样:

"34f8d20f-21da-11eb-a249-de3268ec1e72" | "Paul" | "Newman" | "paul.newman@gmail.com" | "[{"IdNumber":"481d2957-21da-11eb-a249-de3268ec1e72","Type":"Telephone","Number":"+440001122333"},{...},{...}]"

调试TestController.Index端点:

public sealed class SearchContacts
{
    public Guid IdContact { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public IEnumerable<SearchContactsNumber> Numbers { get; set; }
}

public class TestController : Controller
{
    private readonly DbContext _context;

    public TestController(DbContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        var set = _context.SearchContacts.FromsqlRaw<SearchContacts>($"CALL `SearchContacts`()");
        return Ok(set.ToList());
    }
}

返回:

enter image description here

如何归档json字符串的完整绑定?

我正在Pomelo.EntityFrameworkCore.MysqL (3.2.3)和ASP.NET Core 3.1 MVC项目中的MysqL 8数据库一起使用。

解决方法

Pomelo于几周前推出了全栈JSON支持,该支持在最新的Pomelo版本中可用,并将继续使用(以前的方法(如JsonObject<T>已被弃用,5.0中未正式支持) +)。

要使用它,您需要添加以下软件包之一,具体取决于要在引擎盖下使用的堆栈:

  • Pomelo.EntityFrameworkCore.MySql.Json.Microsoft
  • Pomelo.EntityFrameworkCore.MySql.Json.Newtonsoft

这些程序包支持POCO类,特定于堆栈的DOM API和简单的字符串映射。

我们还支持从JSON实体的仅顶级(非常快)到完整(较慢)更改跟踪的任何内容(可以通过options和{{1的UseMicrosoftJson()参数进行控制}}方法。

这是一个完全正常工作的控制台示例项目,该示例演示了如何针对您的特定情况(此处使用Microsoft堆栈)使用Pomelo的全栈JSON支持:

UseNewtonsoftJson()
,

如果将其设为JsonObject,则序列化将自动完成。 JsonObject位于系统命名空间下,Pomelo.EntityFrameworkCore.MySql支持它100%

请参见下面的代码

using System;

public sealed class SearchContacts
{
    public Guid IdContact { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public JsonObject<SearchContactsNumber[]> Numbers { get; set; }

    public SearchContactsNumber[] GetNumbers()
    {
        return Numbers.Object;
    }
}

请参阅:How to use JsonObject of Pomelo.EntityFramework

,

您可以尝试以下操作:

    public sealed class SearchContacts
    {
        public Guid IdContact { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Company { get; set; }
        public IEnumerable<SearchContactsNumber> Numbers { get; private set; }
        private string NumbersJson { set => Numbers = JsonConvert.DeserializeObject<IEnumerable<SearchContactsNumber>>(value); }
    }

只需确保将Numbers属性映射到NumbersJson

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?