c# - 将 MySql 数据库中的 JSON 列映射到 Web Api 中的 C# 类
问题描述
我有一个 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
像这样的东西
地方类
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
}
当我这样做时,这个
Name
属性是NULL
有价值的
存储库中的代码
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}");
推荐阅读
- android - 当您单击下拉值时,微调器 android kotlin 的自定义适配器不可见但可见
- firebase - Firebase first_open 计数变少
- fonts - Phaser 3:文本字体大小
- lua - love2d(lua)中的碰撞检测
- woocommerce - 将 woocommerce 变体 GTIN 添加到结构化数据
- github - Github 不会在手动运行工作流的工作流运行旁边显示分支名称
- testing - 在单击远程启动时在 jmeter 分发测试中出现连接超时错误,但脚本 r 工作正常
- python - Spyder 5.1.5 版问题
- wordpress - WP All 导出 ACF 图片 url
- api - NestJS在dto解析错误响应后删除文件