在我的场景中,我想将json映射到具体类型,另一种方法是使用带有.net核心的automapper版本6。
根据这个答案 - https://stackoverflow.com/a/38108128/6602770我设法将JSON映射到所需的类型。但是,我似乎无法将其反向映射回其JSON格式。
我的代码如下所示:
映射配置文件:
CreateMap<JToken, SomeDto>()
.ForMember(dest => dest.ObjectId, cfg => { cfg.MapFrom(jo => jo["objectId"]); })
.ReverseMap()
.ForAllOtherMembers(x => x.Ignore());
和映射:
var json = _mapper.Map<JToken>(someDto);
没有错误,但它返回null。 我也尝试用JObject而不是JToken设置配置文件,结果相同。
我还试图创建一个单独的映射配置文件,而不是使用&#34; ReverseMap&#34;
public class SomeDtoProfile : Profile
{
public SomeDtoProfile()
{
CreateMap<SomeDto, JObject>()
.ForMember(dest=> dest["objectId"], cfg => { cfg.MapFrom(src => src.ObjectId); })
.ForAllOtherMembers(x => x.Ignore());
}
}
但是这会引发错误:&#34;成员的自定义配置仅支持json类型的顶级个人成员&#34;
我真的很喜欢使用AutoMapper的解决方案,这一切都是可能的还是我错过了一些基本的东西?
答案 0 :(得分:0)
在Mapper配置文件中使用JObject.FromObject
静态工厂方法。
public class SomeDtoProfile : Profile
{
public SomeDtoProfile()
{
CreateMap<SomeDto, JObject>()
.ConvertUsing(JObject.FromObject);
}
}
public class SomeDto
{
public string Name { get; set; }
}
然后如果我们运行以下测试
public class Tests
{
[Fact]
public void ShouldReturnJson()
{
Mapper.Initialize(cfg => cfg.AddProfile(new SomeDtoProfile()));
var jObject = Mapper.Map<JObject>(new SomeDto {Name = "Bob"});
Assert.Equal("{\r\n \"Name\": \"Bob\"\r\n}", jObject.ToString());
}
}
一切都是绿色的!