我尝试使用 Newtonsoft.Json 和 ServiceStack.Text 库来比较序列化/反序列化的性能结果。我有一个名为Application的大型类,我使用此类的实例进行这些操作。对于相同的实例,NewtonSoft.Json工作正常,并给我以下输出:
{
"$id": "1",
"_expiryDate": {
"$id": "2",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_number": {
"$id": "3",
"_underlyingValue": 700771,
"_isModified": true,
"_isTrimmed": false
},
"_sobfDate": {
"$id": "4",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_applyDate": {
"$id": "5",
"_underlyingValue": "/Date(1355127719000+0200)/",
"_isModified": true,
"_isTrimmed": false
},
"_approvalDate": {
"$id": "6",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_contractDate": {
"$id": "7",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_associatedLimitOffers": {
"$id": "8",
"$values": []
},
"_decisionTreeApprovals": {
"$id": "9",
"$values": [
{
"$id": "10",
"_entity": {
"$id": "11",
"_date": null,
"_rules": null,
"_result": {
"$id": "12",
"_underlyingValue": 30,
"_isModified": true,
"_isTrimmed": false
},
"_applicant": null,
"_activity": null,
"_type": null,
"_application": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
}
]
},
"_courierTasks": {
"$id": "13",
"$values": []
},
"_guarantors": {
"$id": "14",
"$values": []
},
"_utilization": {
"$id": "15",
"_entity": {
"$id": "16",
"_date": {
"$id": "17",
"_underlyingValue": null,
"_isModified": true,
"_isTrimmed": false
},
"_isBlockedUsage": null,
"_application": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_associatedBalanceSheet": {
"$id": "18",
"$values": []
},
"_collaterals": {
"$id": "19",
"$values": []
},
"_submitterChannel": {
"$id": "20",
"_entity": {
"$id": "21",
"$type": "BigBank.Data.Model.ChannelDomain.VirtualChannel, BigBank.Data.Model",
"_hierarchyDelegates": null,
"_displayName": {
"$id": "22",
"_underlyingValue": "",
"_isModified": true,
"_isTrimmed": false
},
"_key": null,
"_isActive": null,
"_integrationCode": null,
"_limitOptions": null,
"_contractedOrganizations": null,
"_constraints": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_ownerChannel": {
"$id": "23",
"_entity": {
"$id": "24",
"$type": "BigBank.Data.Model.ChannelDomain.VirtualChannel, BigBank.Data.Model",
"_hierarchyDelegates": null,
"_displayName": {
"$id": "25",
"_underlyingValue": "",
"_isModified": true,
"_isTrimmed": false
},
"_key": null,
"_isActive": null,
"_integrationCode": null,
"_limitOptions": null,
"_contractedOrganizations": null,
"_constraints": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_scoreCard": {
"$id": "26",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_seller": {
"$id": "27",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_priority": {
"$id": "28",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_merchandise": {
"$id": "29",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_payment": {
"$id": "30",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_requestedTerm": {
"$id": "31",
"_entity": {
"$id": "32",
"_maturity": null,
"_application": null,
"_items": null,
"_product": {
"$id": "33",
"_entity": {
"$id": "34",
"_key": null,
"_isActive": null,
"_description": {
"$id": "35",
"_underlyingValue": "",
"_isModified": true,
"_isTrimmed": false
},
"_beginDate": null,
"_endDate": null,
"_limitOptions": null,
"_baseProduct": null,
"_derivedProducts": null,
"_attributes": null,
"_hierarchyDelegates": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_accumulatedInterestUsage": null,
"_pricingFactor": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_status": {
"$id": "36",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_applicant": {
"$id": "37",
"_entity": {
"$id": "38",
"$type": "BigBank.Data.Model.PersonDomain.Person, BigBank.Data.Model",
"_birthDate": null,
"_birthPlace": null,
"_citizenshipNumber": {
"$id": "39",
"_underlyingValue": 11111111111,
"_isModified": true,
"_isTrimmed": false
},
"_dependentRelative": null,
"_disabilityRate": null,
"_religion": null,
"_totalWorkingPeriodInMonth": null,
"_isStaff": null,
"_identificationCertificate": null,
"_drivingLicense": null,
"_passport": null,
"_relatives": null,
"_relativeOf": null,
"_socialSecurities": null,
"_workExperiences": null,
"_decisionTreeApprovals": {
"$id": "40",
"$values": []
},
"_bloodGroup": null,
"_gender": null,
"_graduation": null,
"_maritalStatus": null,
"_name": {
"$id": "41",
"_first": {
"$id": "42",
"_underlyingValue": "TEST",
"_isModified": true,
"_isTrimmed": false
},
"_last": {
"$id": "43",
"_underlyingValue": "TEST",
"_isModified": true,
"_isTrimmed": false
},
"_maiden": null
},
"_nationality": null,
"_deathNotice": null,
"_workingStatus": null,
"_profession": null,
"_birthProvince": null,
"_balanceSheet": {
"$id": "44",
"$values": []
},
"_predefinedLimitOffers": null,
"_accounts": null,
"_locations": null,
"_partnerships": null,
"_applications": null,
"_guarantoredRetailLoanApplications": null,
"_customer": null,
"_tax": null,
"_baseLimit": null,
"_associatedDocuments": null,
"_phones": null,
"_emails": null,
"_isInsured": null,
"_insurances": null,
"_comments": null,
"_createdAt": null,
"_id": {
"$id": "45",
"_underlyingValue": "7c1058a6-0dd3-c378-ebaa-fdcf2a8a6936",
"_isModified": true,
"_isTrimmed": false
},
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"CreditReferenceResult": {
"$id": "46",
"_creditReferencesApplication": null,
"_scrCreditLimit": null,
"_creditReferences": null,
"_creditReferenceOwnData": null,
"_person": null
},
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_purpose": {
"$id": "47",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_targetAccount": {
"$id": "48",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contractLocation": {
"$id": "49",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contractPhone": {
"$id": "50",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contractEmail": {
"$id": "51",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contactLocation": {
"$id": "52",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contactPhone": {
"$id": "53",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_contactEmail": {
"$id": "54",
"_entity": null,
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_fundsTransferType": {
"$id": "55",
"_underlyingValue": null,
"_isModified": false,
"_isTrimmed": false
},
"_associatedDocuments": {
"$id": "56",
"$values": []
},
"_comments": {
"$id": "57",
"$values": []
},
"_createdAt": null,
"_id": {
"$id": "58",
"_underlyingValue": "b9ee4131-43c6-6fe0-be4d-bbe60e6ace97",
"_isModified": true,
"_isTrimmed": false
},
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": {
"$id": "59",
"_entity": {
"$id": "60",
"_state": {
"$id": "61",
"_underlyingValue": "Rejected(Completed)",
"_isModified": true,
"_isTrimmed": false
},
"_description": {
"$id": "62",
"_underlyingValue": "Red(Tamamlandı)",
"_isModified": true,
"_isTrimmed": false
},
"_isCompleted": null,
"_correlationKey": null,
"_logs": null,
"_migration": null,
"_parent": null,
"_children": null,
"_variables": null,
"_definition": null,
"_createdAt": null,
"_id": null,
"_isDeleted": null,
"_isModifiedByOwnProcess": null,
"_version": null,
"_createdBehalfOf": null,
"_createdBy": null,
"_process": null,
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverEntityId": null,
"_serverEntityTypeName": null,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
},
"_clientState": 0,
"_serverState": 0,
"_isLoaded": false,
"_isTrimmed": false
}
后面的ServiceStack.Text输出只是:
{"_serverState":"New","_isLoaded":false,"_isTrimmed":false}
以下是我为两者进行序列化的方法:
private List<string> SerializeUsingServiceStackText(List<Application> applications)
{
List<string> strings = new List<string>();
foreach (Application item in applications)
{
string s = ServiceStack.Text.JsonSerializer.SerializeToString<Application>(item);
strings.Add(s);
}
return strings;
}
Newtonsoft.Json.JsonSerializerSettings jsonSerializerSettings =
new Newtonsoft.Json.JsonSerializerSettings()
{
PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All,
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat,
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto
};
private List<string> SerializeUsingJsonNet(List<Application> applications)
{
List<string> strings = new List<string>();
foreach (Application item in applications)
{
strings.Add(Newtonsoft.Json.JsonConvert.SerializeObject(item, Newtonsoft.Json.Formatting.None, jsonSerializerSettings));
}
return strings;
}
我做错了什么?我是否必须像在Newtonsoft.Json中那样为ServiceStack.Text库做一些设置?
答案 0 :(得分:3)
使用this method检索可序列化属性。它只获得公共的可读属性。没有私人财产或字段。看起来你要么改变你的POCO,要么你坚持使用 Newtonsoft.Json :)
也许this GitHub issue会回答你的问题?
编辑:我猜你 COULD 做这样的事情:
var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
TypeConfig<Application>.Properties = typeof(Application).GetProperties(bindingFlags);
您可能还应该检查一个getter,并且该属性没有标记IgnoreDataMemberAttribute
等。但是你仍然坚持使用属性......
我可能错了,但我认为没有办法将其插入到框架中,所以你必须为你想要去/序列化的所有类型执行此操作。也许你可以制作一个通用的扩展方法来执行此操作,然后对对象进行解/序列化?
答案 1 :(得分:2)
看起来您正在尝试使用私有属性序列化类,但ServiceStack仅序列化公共属性。