简体   繁体   English

ServiceStack.Text无法按预期方式序列化我的对象

[英]ServiceStack.Text does not serialize my object as expected

I'm trying to compare performance results of serialization / deserialization using Newtonsoft.Json and ServiceStack.Text libraries. 我正在尝试使用Newtonsoft.JsonServiceStack.Text库比较序列化/反序列化的性能结果。 I have a large class which is named Application and I'm using an instance of this class for these operations. 我有一个名为Application的大类,并且正在使用此类的实例进行这些操作。 For the same instance NewtonSoft.Json works fine and gives me the following output: 对于相同的实例,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
}

behind this the output of ServiceStack.Text is just: 在此之后,ServiceStack.Text的输出仅为:

{"_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;
    }

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中一样对ServiceStack.Text库进行一些设置?

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 :) 看起来您要么不得不更改POCO,要么就被Newtonsoft.Json所困:)

Maybe this GitHub issue answers your question? 也许这个GitHub问题回答了您的问题?

EDIT: I guess you COULD do something like this: 编辑:我想你可以做这样的事情:

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

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... 您可能还应该检查是否有吸气剂,并且属性未用IgnoreDataMemberAttribute等标记。但是您仍然对属性感到IgnoreDataMemberAttribute ...

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仅对公共属性进行序列化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM