- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下通过 JSON 请求填充的模型类:
public class Driver
{
public string driverId { get; set; }
public string url { get; set; }
public string givenName { get; set; }
public string familyName { get; set; }
public string dateOfBirth { get; set; }
public string nationality { get; set; }
}
public class Constructor
{
public string constructorId { get; set; }
public string url { get; set; }
public string name { get; set; }
public string nationality { get; set; }
}
public class DriverStanding
{
public string position { get; set; }
public string points { get; set; }
public string wins { get; set; }
public Driver Driver { get; set; }
public List<Constructor> Constructors { get; set; }
}
public class StandingsList
{
public string season { get; set; }
public string round { get; set; }
public List<DriverStanding> DriverStandings { get; set; }
}
public class StandingsTable
{
public string season { get; set; }
public List<StandingsList> StandingsLists { get; set; }
}
public class MRData
{
public string xmlns { get; set; }
public string series { get; set; }
public string url { get; set; }
public string limit { get; set; }
public string offset { get; set; }
public string total { get; set; }
public StandingsTable StandingsTable { get; set; }
}
public class RootObject
{
public MRData MRData { get; set; }
}
然后我有一个像这样的简单类:
public class DriverResults
{
public string Season { get; set; }
public string Points { get; set; }
public List<Driver> Driver { get; set; }
}
public class Driver
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
当我请求 JSON 时,第一组类被完全填充。我想从某个类中获取一些属性,例如/RootObject.MRData.StandingsTable.Season = DriverResults.Season。下面是我的属性映射
司机 map
givenName = 名字
家族名 = 姓氏
点 map
点=点
季节 map
季节=季节
这是我到目前为止尝试过的但每次都是空的:
Mapper.CreateMap<MVCF1.API.Driver, MVCF1.Models.Driver>()
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.givenName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.familyName));
Mapper.CreateMap<MVCF1.API.DriverStanding, MVCF1.Models.DriverResults>()
.ForMember(dest => dest.Points, opt => opt.MapFrom(src => src.points));
Mapper.CreateMap<MVCF1.API.StandingsList, MVCF1.Models.DriverResults>()
.ForMember(dest => dest.Season, opt => opt.MapFrom(src => src.season));
Mapper.CreateMap<MVCF1.API.RootObject, MVCF1.Models.DriverResults>();
我查看了自定义类型转换器,但不确定如何通过阅读文档来使用它们。
请帮忙,谢谢。
更新:这是返回的 JSON
{
"MRData":{
"StandingsTable":{
"StandingsLists":[
{
"DriverStandings":[
{
"Constructors":[
{
"constructorId":"red_bull",
"name":"Red Bull",
"nationality":"Austrian",
"url":"http://en.wikipedia.org/wiki/Red_Bull_Racing"
}
],
"Driver":{
"dateOfBirth":"1987-07-03",
"driverId":"vettel",
"familyName":"Vettel",
"givenName":"Sebastian",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Sebastian_Vettel"
},
"points":"255",
"position":"1",
"wins":"5"
},
{
"Constructors":[
{
"constructorId":"ferrari",
"name":"Ferrari",
"nationality":"Italian",
"url":"http://en.wikipedia.org/wiki/Scuderia_Ferrari"
}
],
"Driver":{
"dateOfBirth":"1981-07-29",
"driverId":"alonso",
"familyName":"Alonso",
"givenName":"Fernando",
"nationality":"Spanish",
"url":"http://en.wikipedia.org/wiki/Fernando_Alonso"
},
"points":"245",
"position":"2",
"wins":"3"
},
{
"Constructors":[
{
"constructorId":"lotus_f1",
"name":"Lotus F1",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Lotus_F1"
}
],
"Driver":{
"dateOfBirth":"1979-10-17",
"driverId":"raikkonen",
"familyName":"Räikkönen",
"givenName":"Kimi",
"nationality":"Finnish",
"url":"http://en.wikipedia.org/wiki/Kimi_R%C3%A4ikk%C3%B6nen"
},
"points":"198",
"position":"3",
"wins":"1"
},
{
"Constructors":[
{
"constructorId":"red_bull",
"name":"Red Bull",
"nationality":"Austrian",
"url":"http://en.wikipedia.org/wiki/Red_Bull_Racing"
}
],
"Driver":{
"dateOfBirth":"1976-08-27",
"driverId":"webber",
"familyName":"Webber",
"givenName":"Mark",
"nationality":"Australian",
"url":"http://en.wikipedia.org/wiki/Mark_Webber"
},
"points":"167",
"position":"4",
"wins":"2"
},
{
"Constructors":[
{
"constructorId":"mclaren",
"name":"McLaren",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/McLaren"
}
],
"Driver":{
"dateOfBirth":"1985-01-07",
"driverId":"hamilton",
"familyName":"Hamilton",
"givenName":"Lewis",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Lewis_Hamilton"
},
"points":"165",
"position":"5",
"wins":"3"
},
{
"Constructors":[
{
"constructorId":"mclaren",
"name":"McLaren",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/McLaren"
}
],
"Driver":{
"dateOfBirth":"1980-01-19",
"driverId":"button",
"familyName":"Button",
"givenName":"Jenson",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Jenson_Button"
},
"points":"153",
"position":"6",
"wins":"2"
},
{
"Constructors":[
{
"constructorId":"ferrari",
"name":"Ferrari",
"nationality":"Italian",
"url":"http://en.wikipedia.org/wiki/Scuderia_Ferrari"
}
],
"Driver":{
"dateOfBirth":"1981-04-25",
"driverId":"massa",
"familyName":"Massa",
"givenName":"Felipe",
"nationality":"Brazilian",
"url":"http://en.wikipedia.org/wiki/Felipe_Massa"
},
"points":"95",
"position":"7",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"mercedes",
"name":"Mercedes",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One"
}
],
"Driver":{
"dateOfBirth":"1985-06-27",
"driverId":"rosberg",
"familyName":"Rosberg",
"givenName":"Nico",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Nico_Rosberg"
},
"points":"93",
"position":"8",
"wins":"1"
},
{
"Constructors":[
{
"constructorId":"lotus_f1",
"name":"Lotus F1",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Lotus_F1"
}
],
"Driver":{
"dateOfBirth":"1986-04-17",
"driverId":"grosjean",
"familyName":"Grosjean",
"givenName":"Romain",
"nationality":"French",
"url":"http://en.wikipedia.org/wiki/Romain_Grosjean"
},
"points":"90",
"position":"9",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"sauber",
"name":"Sauber",
"nationality":"Swiss",
"url":"http://en.wikipedia.org/wiki/Sauber"
}
],
"Driver":{
"dateOfBirth":"1990-01-26",
"driverId":"perez",
"familyName":"Pérez",
"givenName":"Sergio",
"nationality":"Mexican",
"url":"http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez"
},
"points":"66",
"position":"10",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"sauber",
"name":"Sauber",
"nationality":"Swiss",
"url":"http://en.wikipedia.org/wiki/Sauber"
}
],
"Driver":{
"dateOfBirth":"1986-09-13",
"driverId":"kobayashi",
"familyName":"Kobayashi",
"givenName":"Kamui",
"nationality":"Japanese",
"url":"http://en.wikipedia.org/wiki/Kamui_Kobayashi"
},
"points":"58",
"position":"11",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"force_india",
"name":"Force India",
"nationality":"Indian",
"url":"http://en.wikipedia.org/wiki/Force_India"
}
],
"Driver":{
"dateOfBirth":"1987-08-19",
"driverId":"hulkenberg",
"familyName":"Hülkenberg",
"givenName":"Nico",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg"
},
"points":"49",
"position":"12",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"force_india",
"name":"Force India",
"nationality":"Indian",
"url":"http://en.wikipedia.org/wiki/Force_India"
}
],
"Driver":{
"dateOfBirth":"1986-04-16",
"driverId":"resta",
"familyName":"di Resta",
"givenName":"Paul",
"nationality":"Scottish",
"url":"http://en.wikipedia.org/wiki/Paul_di_Resta"
},
"points":"46",
"position":"13",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"williams",
"name":"Williams",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Williams_F1"
}
],
"Driver":{
"dateOfBirth":"1985-03-09",
"driverId":"maldonado",
"familyName":"Maldonado",
"givenName":"Pastor",
"nationality":"Venezuelan",
"url":"http://en.wikipedia.org/wiki/Pastor_Maldonado"
},
"points":"43",
"position":"14",
"wins":"1"
},
{
"Constructors":[
{
"constructorId":"mercedes",
"name":"Mercedes",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One"
}
],
"Driver":{
"dateOfBirth":"1969-01-03",
"driverId":"michael_schumacher",
"familyName":"Schumacher",
"givenName":"Michael",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Michael_Schumacher"
},
"points":"43",
"position":"15",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"williams",
"name":"Williams",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Williams_F1"
}
],
"Driver":{
"dateOfBirth":"1983-10-15",
"driverId":"bruno_senna",
"familyName":"Senna",
"givenName":"Bruno",
"nationality":"Brazilian",
"url":"http://en.wikipedia.org/wiki/Bruno_Senna"
},
"points":"30",
"position":"16",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"toro_rosso",
"name":"Toro Rosso",
"nationality":"Italian",
"url":"http://en.wikipedia.org/wiki/Scuderia_Toro_Rosso"
}
],
"Driver":{
"dateOfBirth":"1990-04-25",
"driverId":"vergne",
"familyName":"Vergne",
"givenName":"Jean-Éric",
"nationality":"French",
"url":"http://en.wikipedia.org/wiki/Jean-%C3%89ric_Vergne"
},
"points":"12",
"position":"17",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"toro_rosso",
"name":"Toro Rosso",
"nationality":"Italian",
"url":"http://en.wikipedia.org/wiki/Scuderia_Toro_Rosso"
}
],
"Driver":{
"dateOfBirth":"1989-07-01",
"driverId":"ricciardo",
"familyName":"Ricciardo",
"givenName":"Daniel",
"nationality":"Australian",
"url":"http://en.wikipedia.org/wiki/Daniel_Ricciardo"
},
"points":"10",
"position":"18",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"marussia",
"name":"Marussia",
"nationality":"Russian",
"url":"http://en.wikipedia.org/wiki/Marussia_F1"
}
],
"Driver":{
"dateOfBirth":"1982-03-18",
"driverId":"glock",
"familyName":"Glock",
"givenName":"Timo",
"nationality":"German",
"url":"http://en.wikipedia.org/wiki/Timo_Glock"
},
"points":"0",
"position":"19",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"caterham",
"name":"Caterham",
"nationality":"Malaysian",
"url":"http://en.wikipedia.org/wiki/Caterham_F1"
}
],
"Driver":{
"dateOfBirth":"1981-10-19",
"driverId":"kovalainen",
"familyName":"Kovalainen",
"givenName":"Heikki",
"nationality":"Finnish",
"url":"http://en.wikipedia.org/wiki/Heikki_Kovalainen"
},
"points":"0",
"position":"20",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"caterham",
"name":"Caterham",
"nationality":"Malaysian",
"url":"http://en.wikipedia.org/wiki/Caterham_F1"
}
],
"Driver":{
"dateOfBirth":"1984-09-08",
"driverId":"petrov",
"familyName":"Petrov",
"givenName":"Vitaly",
"nationality":"Russian",
"url":"http://en.wikipedia.org/wiki/Vitaly_Petrov"
},
"points":"0",
"position":"21",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"lotus_f1",
"name":"Lotus F1",
"nationality":"British",
"url":"http://en.wikipedia.org/wiki/Lotus_F1"
}
],
"Driver":{
"dateOfBirth":"1985-12-27",
"driverId":"ambrosio",
"familyName":"d'Ambrosio",
"givenName":"Jérôme",
"nationality":"Belgian",
"url":"http://en.wikipedia.org/wiki/J%C3%A9r%C3%B4me_d%27Ambrosio"
},
"points":"0",
"position":"22",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"marussia",
"name":"Marussia",
"nationality":"Russian",
"url":"http://en.wikipedia.org/wiki/Marussia_F1"
}
],
"Driver":{
"dateOfBirth":"1990-02-15",
"driverId":"pic",
"familyName":"Pic",
"givenName":"Charles",
"nationality":"French",
"url":"http://en.wikipedia.org/wiki/Charles_Pic"
},
"points":"0",
"position":"23",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"hrt",
"name":"HRT",
"nationality":"Spanish",
"url":"http://en.wikipedia.org/wiki/Hispania_Racing"
}
],
"Driver":{
"dateOfBirth":"1977-01-14",
"driverId":"karthikeyan",
"familyName":"Karthikeyan",
"givenName":"Narain",
"nationality":"Indian",
"url":"http://en.wikipedia.org/wiki/Narain_Karthikeyan"
},
"points":"0",
"position":"24",
"wins":"0"
},
{
"Constructors":[
{
"constructorId":"hrt",
"name":"HRT",
"nationality":"Spanish",
"url":"http://en.wikipedia.org/wiki/Hispania_Racing"
}
],
"Driver":{
"dateOfBirth":"1971-02-24",
"driverId":"rosa",
"familyName":"de la Rosa",
"givenName":"Pedro",
"nationality":"Spanish",
"url":"http://en.wikipedia.org/wiki/Pedro_de_la_Rosa"
},
"points":"0",
"position":"25",
"wins":"0"
}
],
"round":"18",
"season":"2012"
}
],
"season":"2012"
},
"limit":"30",
"offset":"0",
"series":"f1",
"total":"25",
"url":"http://ergast.com/api/f1/current/driverstandings.json",
"xmlns":"http://ergast.com/mrd/1.2"
}
}
最佳答案
按照@David 的建议运行断言时,我得到:
AutoMapper.AutoMapperConfigurationException :
Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
=================================================================================
DriverStanding -> DriverResults (Destination member list)
StackOverflow.Null.API.DriverStanding -> StackOverflow.Null.Models.DriverResults (Destination member list)
---------------------------------------------------------------------------------
Season
================================================================================
StandingsList -> DriverResults (Destination member list)
StackOverflow.Null.API.StandingsList -> StackOverflow.Null.Models.DriverResults (Destination member list)
--------------------------------------------------------------------------------
Points
Driver
=============================================================================
RootObject -> DriverResults (Destination member list)
StackOverflow.Null.API.RootObject -> StackOverflow.Null.Models.DriverResults (Destination member list)
-----------------------------------------------------------------------------
Season
Points
Driver
现在基本上你有一个对象 (MRData
),它有一个对象列表 (StandingsList
),它有一个对象列表 (DriverStanding
).我假设当您应用映射时,您希望将这 1 个复杂的 MRData
对象展平为许多 DriverResults
对象。这不是您可以直接使用配置轻松完成的事情,但您可以通过在各种对象上重新应用映射来做到这一点。
我认为您正在寻找与此解决方案类似的东西:AutoMapper and flattening nested arrays
更新 - 更新代码以满足更新后的要求。
我已经部分实现了该解决方案。
MVCF1Profile.cs
namespace MVCF1
{
using System.Collections.Generic;
using AutoMapper;
public class MVCF1Profile : Profile
{
public override string ProfileName
{
get { return "MVCF1Profile"; }
}
protected override void Configure()
{
AllowNullDestinationValues = true;
AllowNullCollections = true;
CreateMap<API.Driver, Models.Driver>()
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.givenName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.familyName));
CreateMap<API.StandingsList, Models.DriverResults>()
.ForMember(dest => dest.Driver, opt => opt.MapFrom(src => src.DriverStandings.Select(ds => Mapper.Map<API.Driver, Models.Driver>(ds.Driver))))
.ForMember(dest => dest.Points, opt => opt.Ignore());
}
}
}
单元测试:
[Test]
public void AutoMapper_Configuration_IsValid()
{
Mapper.Initialize(m => m.AddProfile<MVCF1Profile>());
Mapper.AssertConfigurationIsValid();
}
[Test]
public void AutoMapper_DriverMapping_IsValid()
{
Mapper.Initialize(m => m.AddProfile<MVCF1Profile>());
Mapper.AssertConfigurationIsValid();
// Convert JSON string from question to RootObject instance
var data = GetData();
var ds = data.MRData.StandingsTable.StandingsLists.First();
var driverResults = Mapper.Map<StandingsList, Models.DriverResults>(ds);
Assert.That(driverResults, Is.Not.Null);
Assert.That(driverResults.Points, Is.Null);
Assert.That(driverResults.Season, Is.EqualTo("2012"));
Assert.That(driverResults.Driver, Is.Not.Null);
Assert.That(driverResults.Driver.Count(), Is.EqualTo(25));
}
作为引用,我的 GetData
是(删除了上面的 json 字符串)
private RootObject GetData()
{
string jsonMessage;
#region Initialise String
jsonMessage = @"";
#endregion
var data = JsonConvert.DeserializeObject<RootObject>(jsonMessage);
Assert.That(data, Is.Not.Null);
Assert.That(data, Is.InstanceOf<RootObject>());
Assert.That(data.MRData, Is.Not.Null);
Assert.That(data.MRData, Is.InstanceOf<MRData>());
Assert.That(data.MRData.StandingsTable, Is.Not.Null);
Assert.That(data.MRData.StandingsTable, Is.InstanceOf<StandingsTable>());
return data;
}
您只需再次调用映射器即可根据需要为更高级别的对象应用映射。例如,一旦你修复了你可以做的配置:
Mapper.Map(root.MRData.StandingsTable, result);
这会将 StandingsTable 中的适当字段映射到结果目标。
关于c# - Automapper 将多个嵌套类映射到一个具有各种属性的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405899/
所以我试图设置“内容”类的高度,但它似乎不起作用。我对嵌套 DIV 非常陌生,我已经尝试了我在谷歌搜索中发现的修复程序,但似乎没有任何效果。帮助?
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
基本上,我的问题很简单,但它需要知道 Struts 1.1 并且还活着的人。 我尝试构建的伪代码看起来像这样: IF element.method1 = true THEN IF element
我正在尝试将 Excel 嵌套 IF 语句转换为代码语言,但我不确定我是否正确执行此操作,希望能得到一些帮助 这是Excel语句: =IF(D3="Feather",IF(OR(I3>1000,R3=
如果我们创建两个或三个评论并对其进行多次回复,则“有用”链接在单击时会导致问题,它会对具有相同编号的索引执行 ng-click 操作,从而显示具有相同索引的所有文本。如何解决此嵌套问题,以便在单击链接
我在项目中使用Scala,想与Stripe集成,但它只提供Java API。例如,要创建 session ,我使用: val params = new util.HashMap[String, Any
以下代码有一个 Div,其中连续包含四个较小的 Div。四个 Div 中的每一个还包含一个较小的 Div,但此 Div 未显示。我尝试了各种显示和位置组合,看看 div 是否会出现。 classGoa
我在这里有一个问题,循环是: for (i=0; i < n; ++i) for (j = 3; j < n; ++j) { ...
我正在尝试编写代码来显示具有奇数宽度的形状。形状完成后,将其放置在外部形状内。用户将能够输入用于形状的字符和行数。我希望生成一个形状,并通过 for 循环生成一个外部形状。 ***** .
$(".globalTabs").each(function(){ var $globalTabs = $(this); var parent = $globalTabs.parent
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
所以我在这个问题上遇到了一些麻烦,因为变量 i。我只是不确定在第二个 while 循环中如何处理它。对于我的外循环,我知道它将运行 log_4(n^2) 次迭代。对于内部 while 循环,我计算的迭
我似乎找不到在枚举上应用多个 if/then 逻辑的工作方式。 anyOf 不应用条件逻辑,而是表示如果其中任何一个匹配则很好。 allOf 再次不应用条件逻辑,而是测试属性/必填字段的超集。 这是一
如何访问 ReaderT 的内部 monad。 在我的例子中,我有类型: newtype VCSSetupAction a = VCSSetupAction (ReaderT (Maybe VCSCo
这个问题在这里已经有了答案: Add leading zeroes/0's to existing Excel values to certain length (7 个回答) 7年前关闭。 我正在寻
我已经绑定(bind)了很多 AND/OR 函数的组合并且没有运气。 这是我需要创建的: 在 B 列中,我有公司 ID,范围从两个数字字符到六个数字字符。 我需要在 B 列中的每个公司 ID 之前的每
我是 VBA 新手,在尝试编写的宏中使用 If 语句时遇到了一些困难。每个月我都会收到一份 Excel 报告,其中列出了我们公司的哪些员工执行了某些任务。我正在编写的宏旨在将每个员工的数据复制并粘贴到
如果在 B 列中找到单元格 A1 中的值,则使用文本 321 填充除非在 C 列中找到单元格 A1 中的值,在这种情况下填充文本 121反而。如果单元格 A1 的内容不在 B 列或 C 列中,则使用
我有几十万个地址。其中一些在整数之后有粒子。如 4356 A Horse Avenue , 其他格式正常4358 Horse Avenue .有些有“A”,有些有“B”。我正在尝试删除整数和粒子之间的
我是一名优秀的程序员,十分优秀!