我想知道是否可以將json對象映射到poco對象。將JSON對象映射到POCO
JSON對象我試圖反序列化與地圖:
{
"customers": [{
"customerid": "",
"firstname": "",
"lastname": "",
"companyname": "",
"email": "",
"language": "",
"culture": "",
"addressline1": "",
"addressline2": "",
"city": "",
"country": "",
"phonenumber": "",
"postalcode": "",
"region": "",
"state": "",
"domain": "",
"partnerid": "",
"subscriptions": [{
"id": "",
"offerid": "",
"offername": "",
"friendlyname": "",
"quantity": "",
"parentsubscriptionid": "",
"creationdate": "",
"effectivestartdate": "",
"commitmentenddate": "",
"status": "",
"autorenewenabled": "",
"billingtype": "",
"partnerbillingcycle": "",
"partnerid": "",
"orderid": "",
"offerlink": "",
"parentsubscriptionlink": ""
}]
},
{
"customerid": "",
"firstname": "",
"lastname": "",
"companyname": "",
"email": "",
"language": "",
"culture": "",
"addressline1": "",
"addressline2": "",
"city": "",
"country": "",
"phonenumber": "",
"postalcode": "",
"region": "",
"state": "",
"domain": "",
"partnerid": "",
"subscriptions": [{
"id": "",
"offerid": "",
"offername": "",
"friendlyname": "",
"quantity": "",
"parentsubscriptionid": "",
"creationdate": "",
"effectivestartdate": "",
"commitmentenddate": "",
"status": "",
"autorenewenabled": "",
"billingtype": "",
"partnerbillingcycle": "",
"partnerid": "",
"orderid": "",
"offerlink": "",
"parentsubscriptionlink": ""
}]
},
{
"customerid": "",
"firstname": "",
"lastname": "",
"companyname": "",
"email": "",
"language": "",
"culture": "",
"addressline1": "",
"addressline2": "",
"city": "",
"country": "",
"phonenumber": "",
"postalcode": "",
"region": "",
"state": "",
"domain": "",
"partnerid": "",
"subscriptions": [{
"id": "",
"offerid": "",
"offername": "",
"friendlyname": "",
"quantity": "",
"parentsubscriptionid": "",
"creationdate": "",
"effectivestartdate": "",
"commitmentenddate": "",
"status": "",
"autorenewenabled": "",
"billingtype": "",
"partnerbillingcycle": "",
"partnerid": "",
"orderid": "",
"offerlink": "",
"parentsubscriptionlink": ""
}]
}
]
}
,我試圖映射到
public class CustomersDTO
{
public List<CustomerDTO> Customers { get; set; }
}
public class CustomerDTO
{
public BE.Customer Customer { get; set; }
public List<BE.Subscription> Subscriptions { get; set; }
}
和DTO映射我使用
CreateMap<JObject, CustomersDTO>()
.ForMember("Customers", cfg => { cfg.MapFrom(jo => jo["customers"]); })
;
CreateMap<JObject, BE.Customer>()
.ForMember("CustomerGUID", cfg => { cfg.MapFrom(jo => jo["customerid"]); })
.ForMember("FirstName", cfg => { cfg.MapFrom(jo => jo["firstname"]); })
.ForMember("Surname", cfg => { cfg.MapFrom(jo => jo["lastname"]); })
.ForMember("CompanyName", cfg => { cfg.MapFrom(jo => jo["companyname"]); })
.ForMember("Email", cfg => { cfg.MapFrom(jo => jo["email"]); })
.ForMember("PreferredLanguage", cfg => { cfg.MapFrom(jo => jo["language"]); })
.ForMember("PreferredCurrency", cfg => { cfg.MapFrom(jo => jo["culture"]); })
.ForMember("Address1", cfg => { cfg.MapFrom(jo => jo["addressline1"]); })
.ForMember("Address2", cfg => { cfg.MapFrom(jo => jo["addressline2"]); })
.ForMember("Address3", cfg => { cfg.MapFrom(jo => jo["city"]); })
.ForMember("Address4", cfg => { cfg.MapFrom(jo => jo["state"]); })
.ForMember("MobileNumber", cfg => { cfg.MapFrom(jo => jo["phonenumber"]); })
.ForMember("PostalCode", cfg => { cfg.MapFrom(jo => jo["postalcode"]); })
.ForMember("Region", cfg => { cfg.MapFrom(jo => jo["region"]); })
.ForMember("CSPDomain", cfg => { cfg.MapFrom(jo => jo["domain"]); })
;
CreateMap<JObject, BE.Subscription>()
.ForMember("OfferId", cfg => { cfg.MapFrom(jo => jo["offerid"]); })
.ForMember("OfferId", cfg => { cfg.MapFrom(jo => jo["offerid"]); })
.ForMember("Quantity", cfg => { cfg.MapFrom(jo => jo["quantity"]); })
.ForMember("FriendlyName", cfg => { cfg.MapFrom(jo => jo["friendlyname"]); })
.ForMember("AssignedDate", cfg => { cfg.MapFrom(jo => jo["creationdate"]); })
.ForMember("Status", cfg => { cfg.MapFrom(jo => jo["status"]); })
.ForMember("OfferURI", cfg => { cfg.MapFrom(jo => jo["offerlink"]); })
;
public class AutoMapperConfiguration
{
public MapperConfiguration Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<CustomerProfile>();
});
return config;
}
}
我試圖執行的代碼
var customersJsonObj = JObject.Parse(jsonText);
var customers = Mapper.Map<CustomersDTO>(customersJsonObj);
當我執行CustomersDTO.Customers屬性上面的行時,json數組中有正確數量的客戶對象,但嵌套的CustomerDTO.Customer和CustomerDTO.Subscriptions屬性爲null。
我不知道如果我正確地做到這一點,我需要這些屬性填充從json對象正確的值。
https://stackoverflow.com/questions/21611674/how-to-auto-generate-ac-sharp-class -json-object-string 我建議安裝WebEssential擴展,然後你可以使用Newtonsoft JSON或任何其他庫來將json字符串轉換爲poco對象。 –
您可以使用Newtownsoft或其他框架將您的JSON反序列化爲C#類。這與AutoMapper無關。當你把你的模型轉換成你的數據庫對象時,你會使用它。 – krillgar
您的JSON首先無效,請首先驗證並更正JSON。 – Aby