c# - 将 JSON 列从 MySql 数据库映射到来自 Web Api 的 C# 类

标签 c# mysql asp.net-mvc entity-framework asp.net-web-api

我有一个带有列的 MySql 数据库 Id int 和 Name :json

位置表样本

Id      Name
1       {"en":"Sphinx","ar":"أبو الهول","fr":"Le sphinx"}

C#地方类
public class Place
{
        [Key, Column("id")]
        public int Id { get; set; }

        [Column("name")]
        public string Name { get; set; }
}

我正在连接 EntityFramework 6 并且连接成功并像这样检索数据

{Id = 1, Name = "{\"en\":\"Sphinx\", \"ar\":\"أبو الهول\", \"fr\":\"Le sphinx\"}" }



我想要如何将名称映射到 new Object不是 JSON string
像这样的东西

地点类(class)
public class Place
{
        [Key, Column("id")]
        public int Id { get; set; }

        [Column("name")]
        public Localized<string> Name { get; set; }
}

本地化类
public class Localized<T>
{
        public T en { get; set; } // english localization
        public T ar { get; set; } // arabic localization
        public T fr { get; set; } // french localization
}

when I do this Name property come with NULL value



存储库中的代码
using (var context = new PlacesEntityModel())
{
     return context.Places.Take(5).ToList();
}

我不想用 AutoMapper ,

我希望 EntityFramework 中的某些内容仅选择 一种语言数据库级 无需获取所有其他数据,然后将其映射

如何解决这个问题?

最佳答案

您可以尝试扩展方法从您的实体类型映射。

public class Place
{
    [Key, Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }
}

public class PlaceDTO
{
    [Key, Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public Localized<string> Name { get; set; }
}

public class Localized<T>
{
    public T en { get; set; } // english localization
    public T ar { get; set; } // arabic localization
    public T fr { get; set; } // french localization
}
扩展方法 ToDto
public static class Extensions
{
    public static PlaceDTO ToDto(this Place place)
    {
        if (place != null)
        {
            return new PlaceDTO
            {
                Id = place.Id,
                Name = JsonConvert.DeserializeObject<Localized<string>>(place.Name)
            };
        }

        return null;
    }
}
用法
var place = new Place() { Id = 1, Name = "{\"en\":\"Sphinx\", \"ar\":\"أبو الهول\", \"fr\":\"Le sphinx\"}" };
var placeDTO = place.ToDto();

Console.WriteLine($"{placeDTO.Id}-{placeDTO.Name.ar}-{placeDTO.Name.en}-{placeDTO.Name.fr}");

关于c# - 将 JSON 列从 MySql 数据库映射到来自 Web Api 的 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60334688/

相关文章:

c# - P/Invoke 为目标 DLL 提供的内存是否较少?

javascript - 如何将 js 表单元格值 POST 到 PHP 并插入到 MYSQL 数据库

php - 无法登录(MySQL、PHP)

jquery - 如何使用asp.net mvc5实现ajax登录?

c# - .NET,每分钟(每分钟)发生一次事件。计时器是最好的选择吗?

c# - 从 C# 代码向 SQL Server 插入数据

c# - 在 ASP.NET 中使用 Masked Edit Extender 的 TextBox 中的退格键或删除键在 Chrome 中不起作用

javascript - 将 PHP 变量与 Javascript 结合使用

c# - 在 Debug模式下进行用户测试——为什么不呢?

asp.net-mvc - 带有预设值的 Html.HiddenFor