本文介绍了ServiceStack.Text不序列我对象的要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用的 Newtonsoft.Json ServiceStack.Text 库系列化比较/反序列化的性能结果。我有被命名为应用程序,我使用这个类进行这些操作的一个实例的一大类。对于同一个实例NewtonSoft.Json工作正常,并给了我下面的输出:

I'm trying to compare performance results of serialization / deserialization using Newtonsoft.Json and ServiceStack.Text libraries. I have a large class which is named Application and I'm using an instance of this class for these operations. For the same instance NewtonSoft.Json works fine and gives me the following output:

{
  "$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的输出就是:

behind this the output of ServiceStack.Text is just:

{"_serverState":"New","_isLoaded":false,"_isTrimmed":false}

下面是我的方法做序列为:

Here is my methods doing serialization for both:

    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;
    }



我在做什么错了?我必须为ServiceStack.Text库做一些设置,因为我在Newtonsoft.Json办?

What am I doing wrong? Do I have to do some settings for the ServiceStack.Text library as I do in Newtonsoft.Json?

推荐答案

该序列化的属性与检索。它只是变得公开,可读的属性。没有专用属性或字段。看起来你要么改变你波苏斯或者你坚持的 Newtonsoft.Json :)

The serializable properties are retrieved with this method. It only gets public, readable properties. No private properties or fields. Looks like you either have to change your POCOs or you're stuck with Newtonsoft.Json :)

可能的回答你的问题?

编辑:我猜你的 的可以做这样的事情:

I guess you COULD do something like this:

var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
TypeConfig<Application>.Properties = typeof(Application).GetProperties(bindingFlags);

您应该大概也检查一个getter和属性都没有标明 IgnoreDataMemberAttribute 等,但你还是坚持了性能...

You should probably also check for a getter and that the properties are not marked with IgnoreDataMemberAttribute etc. But you're still stuck with properties...

我可能是错的,但我看不出这种封堵方式到框架,所以你必须对所有要德/序列化类型做到这一点。也许你可以把它做到这一点的通用扩展方法,然后德/序列化对象?

I may be wrong, but I see no way of plugging this into the framework, so you have to do this for all the types you want to de-/serialize. Maybe you could make a generic extension method which does this and then de-/serializes the object?

这篇关于ServiceStack.Text不序列我对象的要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 12:39