错误"无效的JSON原语"反序列化?

时间:2014-11-19 02:41:44

标签: c# asp.net .net

我正在序列化对象以使其从WebAPI返回。

下面的代码从DB获取数据并序列化对象:

public string GetHealthInsuranceApplication(int PId)
    {  
        HealthApplicationViewModel model = new HealthApplicationViewModel();
        model.ProductDetails.Category = StringResources.ProductCategoryFamily;
        model.Tab = HealthLeadTab.YourDetails;
        model.ProductDetails = db.CurrentProductSetRepository.GetByID(PId);
        string data = new JavaScriptSerializer().Serialize(model);                
        return data;                   
    }          
}

这是我的序列化字符串:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"Application":{"LeadSequence":0,"SessionID":null,"ProductId":null,"Button1":null,"Button2":null,"LeadID":null,"Fname":null,"Lname":null,"Email":null},"HealthProductDetails":{"LeadSequence":0,"SessionID":null,"Pid":null,"ProductName":null,"Cost":null,"Excess":null,"StartText":null,"StartDate":null,"FederalRebate":null,"MedicareCardNo":null,"MedicareCardName":null,"MedicareBenefitsEligible":null,"TransformAnotherFund":null,"ExistingFundName":null,"ExistingMembershipNo":null,"PartnerFundName":null,"PartnerMembershipNo":null,"Insertedon":null,"Modifiedon":null,"RolloverStartDate":null,"RolloverQuestion":null,"RolloverPartnerStartDate":null,"RolloverPartnerQuestion":null,"MedicareCardExpiryDate":null,"IncomeTier":null,"Clientid":null},"ApplicantDetails":{"LeadSequence":0,"Title":null,"GivenName":null,"Surname":null,"DOB":null,"Gender":"","Address1":null,"Address2":null,"Suburb":null,"State":null,"Postcode":null,"IsPostal":null,"PostalAddress1":null,"PostalAddress2":null,"Postalsuburb":null,"PostalState":null,"PostalCode":null,"WorkPhone":null,"HomePhone":null,"Mobile":null,"Email":null,"ContinuousCover":null,"PartnerTitle":null,"PartnerName":null,"PartnerSurname":null,"PartnerDOB":null,"PartnerGender":null,"PartnerContinuousCover":null,"Conditions":null,"ConditionsText":null,"Insertedon":null,"Modifiedon":null},"DependentDetails":[],"PaymentDetails":{"LeadSequence":0,"PaymentMethod":null,"Frequency":null,"Day":null,"CardType":null,"CardNo":null,"CardHolderName":null,"ExpiryMonth":null,"ExpiryYear":null,"BSB":null,"AccountNo":null,"AccountName":null,"FinancialInstitution":null,"Branch":null,"Authorise":false,"Insertedon":"\/Date(-62135596800000)\/","Modification":"\/Date(-62135596800000)\/","Status":null,"ClaimBSB":null,"ClaimAccountNo":null,"ClaimAccountName":null,"CardCCV":null,"Processed_FundID":null,"Processed_FundName":null,"Processed_ProductName":null,"Processed_Category":null,"Processed_Premium":0,"Processed_ProductType":null,"PolicyNumber":null,"ClaimFinancialInstitution":null,"SaleFrom":null,"MaskedCCNumber":null,"TempCRN":null},"LeadDetails":{"Lid":0,"LeadId":null,"Lifestage":null,"Age":null,"State":null,"IpAddress":null,"Filter_Hospital_Ambulance":null,"Filter_Hospital_AssistedReproductive":false,"Filter_Hospital_obstetric":false,"Filter_Hospital_cardiac":false,"Filter_Hospital_cataracteyelens":false,"Filter_Hospital_renalFailure":false,"Filter_Hospital_jointreplacementsall":false,"Filter_Hospital_Plasticnoncosmetic":false,"Filter_Hospital_sterilisation":false,"Filter_Hospital_Podiatric":null,"Filter_Hospital_Palliativecare":false,"Filter_Hospital_NonMedicare":null,"Filter_DentalGeneral":false,"Filter_DenatalMajor":false,"Filter_DentalEndodontic":false,"Filter_DentalOrthodontic":false,"Filter_optical":false,"Filter_physiotherapy":null,"Filter_chiropractic":false,"Filter_podiatry":false,"Filter_psychology":false,"Filter_NoPBS":false,"Filter_Acupuncture":false,"Filter_Naturopathy":false,"Filter_Massage":false,"Filter_Hearingaids":false,"Filter_bloodglucosemonitors":false,"Filter_Ambulance":false,"EntryTime":"\/Date(1416364323531)\/","Situation":null,"Access_Special_Funds":null,"AccomPrivate":false,"AccomPrivateShared":false,"AccomPublic":false,"Filter_Hospital_Rehabilitation":false,"Filter_Hospital_Psychiatric":false,"HMC_Hospital":null,"HMC_Extras":null,"Subscribe":null,"rebate_percent":null,"lhc_total_percent":null,"lhc_p1_percent":null,"lhc_p2_percent":null,"payment_freq":"month","excess_option":null,"selected_fund":null,"Filter_Hospital_GastricBanding":false,"Filter_Hospital_GastricBanding_Restricted":null,"ShowPopUpOnLoad":false,"PaymentFrequencyText":"per Month","ResultsForText":"Results for year old, , ."},"ProductDetails":{"PID":1,"ProductKey":1160,"ProductID":"0cfc44eb-5d7f-471a-af71-d25f4355d525","HMCProductExtraID":null,"FundID":"06e94e02-c6e3-4d3c-8c34-940f590f8238","FundName":"CUA Health Limited","ProductName":"Silver Extras","ProductURL":"http://www.cuahealth.com.au","TableCode":"I2","State":"NT","Category":"SingleParentFamily","ProductType":"GeneralHealth","Premium":84.98,"PremiumHospitalCover":null,"DateValidFrom":"\/Date(1396270800000)\/","MedicareLevySurchargeExempt":"False","ClassificationGeneralHealth":"Medium","OtherProductFeatures":"CUA Health\u0027s Extras policies offer great value for money for a large range of services with on the spot claiming. All CUA Health customers get additional discounts from leading optical retail stores. Visit www.cuahealth.com.au for more details","Cover":"Full","BenefitsLimitGroup":"Ambulance","GapCoverProvided":null,"ClassificationHospital":null,"Accomodation":null,"HospitalAmbulance":null,"HospitalCoverOtherProductFeatures":null,"GeneralHelpCoverKey":1161,"Filter_DentalGeneral":true,"Filter_DentalMajor":true,"Filter_Podiatry":true,"Filter_Massage":true,"Filter_Naturopathy":true,"Filter_Ambulance":false,"Filter_Chiropractic":true,"Filter_Acupuncture":true,"Filter_Endodontic":true,"Filter_HearingAids":true,"Filter_GlucoseMonitor":true,"Filter_Physiotherapy":true,"Filter_Psychology":true,"Filter_NonPBS":true,"Filter_Optical":true,"Filter_Orthodontic":true,"Filter_Hospital_Cardiac":false,"Filter_Hospital_Cardiac_Restricted":false,"Filter_Hospital_Psychiatric":false,"Filter_Hospital_Psychiatric_Restricted":false,"Filter_Hospital_Sterilisation":false,"Filter_Hospital_Sterilisation_Restricted":false,"Filter_Hospital_JointReplacementHipKnee":false,"Filter_Hospital_JointReplacementHipKnee_Restricted":false,"Filter_Hospital_PlasticNonCosmetic":false,"Filter_Hospital_PlasticNonCosmetic_Restricted":false,"Filter_Hospital_Obstetric":false,"Filter_Hospital_Obstetric_Restricted":false,"Filter_Hospital_NonMedicare":false,"Filter_Hospital_NonMedicare_Restricted":false,"Filter_Hospital_AssistedReproductive":false,"Filter_Hospital_AssistedReproductive_Restricted":false,"Filter_Hospital_CataractEyeLens":false,"Filter_Hospital_CataractEyeLens_Restricted":false,"Filter_Hospital_Palliative":false,"Filter_Hospital_Palliative_Restricted":false,"Filter_Hospital_Rehabilitation":false,"Filter_Hospital_Rehabilitation_Restricted":false,"Filter_Hospital_RenalDialysis":false,"Filter_Hospital_RenalDialysis_Restricted":false,"Filter_Hospital_JointReplacementAll":false,"Filter_Hospital_JointReplacementAll_Restricted":false,"Filter_Hospital_Podiatric":false,"Filter_Hospital_Podiatric_Restricted":false,"Filter_Hospital_JointReplacementShoulderE":false,"Filter_Hospital_JointReplacementShoulderE_Restricted":false,"CopaymentType":null,"Shared":null,"SharedMax":null,"Private":null,"PrivateMax":null,"DaySurgery":null,"ExcessType":null,"ExcessPerPerson":null,"offer":null,"ApplyNowURL":"join_now.aspx?pid=1","ExcludefromHMCProducts":false,"MoreInfo":null,"Access_Special_Funds":false,"ProductEnabled":true,"Filter_Hospital_GastricBanding":null,"Filter_Hospital_GastricBanding_Restricted":null,"ePID":null,"eEXCESSTYPE":null,"eEXCESSPERADMISSION":null,"eEXCESSPERPERSON":null,"eEXCESSPERPOLICY":null,"ExcessString":"","FundLogoPath":"/umbraco/Images/brands/CUA.png","isPublicCover":false,"isMbpNibCover":false,"PublicHospital_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","PrivateHospital_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","AssistedReproductive_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_obstetric_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_Cardiac_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_CataractEyeLens_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_RenalDialysis_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_JointReplacementAll_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_PlasticNonCosmetic_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_Sterilisation_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_GastricBanding_IconMarkup":"","Filter_Hospital_Palliative_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_Rehabilitation_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Hospital_Psychiatric_IconMarkup":"\u003ci class=\"hmc hmc-close-red\"\u003e\u003c/i\u003e","Filter_Ambulance_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Ambulance_Info":"","Filter_DentalGeneral_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_DentalMajor_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Endodontic_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Orthodontic_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Optical_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Physiotherapy_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Chiropractic_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Podiatry_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Psychology_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Acupuncture_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Naturopathy_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_Massage_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_GlucoseMonitor_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_HearingAids_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","Filter_NonPBS_IconMarkup":"\u003ci class=\"hmc hmc-check\"\u003e\u003c/i\u003e","AssistedReproductive":null,"AssistedReproductive_BLP":"","Cardiac":null,"Cardiac_BLP":"","CataractEyeLens":null,"CataractEyeLens_BLP":"","GastricBanding":null,"GastricBanding_BLP":"","JointReplacementAll":null,"JointReplacementAll_BLP":"","Obstetric":null,"Obstetric_BLP":"","Psychiatric":null,"Psychiatric_BLP":"","Rehabilitation":null,"Rehabilitation_BLP":"","RenalDialysis":null,"RenalDialysis_BLP":"","ExtraLimitsInfo":null,"DentalGeneralLimits":"","DentalMajorLimits":"","EndodonticLimits":"","OrthodonticLimits":"","OpticalLimits":"","PhysioLimits":"","ChiroLimits":"","PodiatryLimits":"","PsychoLimits":"","AcupLimits":"","NaturoLimits":"","remMassLimits":"","GlucoseMonitorLimits":"","HearingAidsLimits":"","NonPBSLimits":""},"GeoData":{"Australian_States_Binder":[{"Selected":true,"Text":"Please select...","Value":""},{"Selected":false,"Text":"New South Wales","Value":"New South Wales"},{"Selected":false,"Text":"South Australia","Value":"South Australia"},{"Selected":false,"Text":"Queensland","Value":"Queensland"},{"Selected":false,"Text":"Northern Territory","Value":"Northern Territory"},{"Selected":false,"Text":"Tasmania","Value":"Tasmania"},{"Selected":false,"Text":"Victoria","Value":"Victoria"},{"Selected":false,"Text":" Western Australia","Value":" Western Australia"}]},"Tab":0,"YourDetailsTabClassMarkUp":"apply-acrdgn","MembershipDetailsTabClassMarkUp":"apply-acrdgn closed","PaymentDetailsTabClassMarkUp":"apply-acrdgn closed"}</string>

当我尝试使用下面的代码对其进行反序列化时,会生成错误“Invalid Json primitive”:

 public static T GetObjectFromSerializedJSONString<T>(string data)
         where T : class, new()
    {
        T obj = new T();

        if (!string.IsNullOrEmpty(data) && data !="null")
        {
            JavaScriptSerializer jsSerObj1 = new JavaScriptSerializer();
            jsSerObj1.MaxJsonLength=int.MaxValue;
            data =jsSerObj1.Deserialize<string>(data);
            JavaScriptSerializer jsSerObj2 = new JavaScriptSerializer();
            jsSerObj2.MaxJsonLength = int.MaxValue;
            obj =jsSerObj2.Deserialize<T>(data);
        }            

        return obj;
    }

修改 1.在序列化obj(用于测试)后,我使用下面的行来反序列化,我能够反序列化而不会出现错误new JavaScriptSerializer().Deserialize<HealthApplicationViewModel>(data);

  1. 当尝试在调用WebAPI的类中使用相同的代码行时,我得到相同的错误“无效的JSON原语”
  2. 请帮助我。

2 个答案:

答案 0 :(得分:1)

标签:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">

不是有效的JSON,会导致问题。

答案 1 :(得分:0)

我解决了这个问题。我刚刚检查过,我的WebClient将它作为XML返回,所以我修改了它并从那里以Json的形式返回,之后就好了。