猿问

无法将 json 字符串反序列化为 ac# 类

我有一个从 api 端点返回的 json 字符串,我正在尝试将其反序列化为 ac# 类。反序列化过程出错。


传入的json字符串:


{"amount":"3.00","resptext":"Approval","cvvresp":"P","respcode":"000","avsresp":"","merchid":"800000000800","token":"9478837814450119","authcode":"PPS306","respproc":"RPCT","emvTagData":"{\"TVR\":\"0200008000\",\"PIN\":\"None\",\"Signature\":\"true\",\"Mode\":\"Issuer\",\"ARC\":\"Z3\",\"TSI\":\"E800\",\"Application Preferred Name\":\"CREDITO DE VISA\",\"AID\":\"A0000000031010\",\"IAD\":\"06010A03A00000\",\"Entry method\":\"Chip Read\",\"Application Label\":\"VISA CREDIT\"}","retref":"116390139157","respstat":"A","account":"47XXXXXXXXXX0119"}

C#类:


public class AuthCardResponse

    {      

        public string token { get; set; }

        public string expiry { get; set; }

        public string name { get; set; }

        public string batchid { get; set; }

        public string retref { get; set; }

        public string avsresp { get; set; }

        public string respproc { get; set; }

        public string amount { get; set; }

        public string resptext { get; set; }

        public string authcode { get; set; }

        public string respcode { get; set; }

        public string merchid { get; set; }

        public string cvvresp { get; set; }

        public string respstat { get; set; }

        public string account { get; set; }

        public string bintype { get; set; }

        public string entrymode{get;set;}

        public string commcard { get; set; }        

        //public string emvTagData { get; set; }        

        public EmvTagData emvTagData { get; set; }

    }    


    public class EmvTagData

    {

        public string TVR { get; set; }

        public string PIN { get; set; }

        public string Signature { get; set; }

        public string Mode { get; set; }

        public string TSI { get; set; }

        public string AID { get; set; }

        public string ARC { get; set; }

        public string IAD { get; set; }

    }

}



回首忆惘然
浏览 135回答 3
3回答

撒科打诨

您的 emvTagData 是一个文字字符串,但您正试图将其反序列化为一个复杂的对象。"emvTagData":"{\"TVR\":\"0200008000\",\"PIN\":\"None\",\"Signature\":\"true\",\"Mode\":\"Issuer\",\"ARC\":\"Z3\",\"TSI\":\"E800\",\"Application Preferred Name\":\"CREDITO DE VISA\",\"AID\":\"A0000000031010\",\"IAD\":\"06010A03A00000\",\"Entry method\":\"Chip Read\",\"Application Label\":\"VISA CREDIT\"}"看到您已经将它作为string类中注释掉的类型,AuthCardResponse我希望您已经发现可以将其反序列化为string.

莫回无

您可以在线使用 JSON to Csharp 检查您的 C# 类您需要更多步骤才能通过DeserializeemvTagData 为您的对象获取结果。http://json2csharp.com/ 使用您的 JSON 数据,您的课程应该是public class RootObject{    public string amount { get; set; }    public string resptext { get; set; }    public string cvvresp { get; set; }    public string respcode { get; set; }    public string avsresp { get; set; }    public string merchid { get; set; }    public string token { get; set; }    public string authcode { get; set; }    public string respproc { get; set; }    public string emvTagData { get; set; }    public string retref { get; set; }    public string respstat { get; set; }    public string account { get; set; }}

喵喔喔

您的 json 的 Newtonsoft.Json 语法错误。您的 json 中的对象 (EmvTagData) 应如下所示:"emvTagData": {"TVR": "0200008000","PIN": "None","Signature": "true","Mode": "Issuer","ARC": "Z3","TSI": "E800","Application Preferred Name": "CREDITO DE VISA","AID": "A0000000031010","IAD": "06010A03A00000","Entry method": "Chip Read","Application Label": "VISA CREDIT"}主括号前后没有 \" 和 "。整个 json :{"amount":"3.00","resptext":"Approval","cvvresp":"P","respcode":"000","avsresp":"","merchid":"800000000800","token":"9478837814450119","authcode":"PPS306","respproc":"RPCT","emvTagData":{"TVR":"0200008000","PIN":"None","Signature":"true","Mode":"Issuer","ARC":"Z3","TSI":"E800","Application Preferred Name":"CREDITO DE VISA","AID":"A0000000031010","IAD":"06010A03A00000","Entry method":"Chip Read","Application Label":"VISA CREDIT"},"retref":"116390139157","respstat":"A","account":"47XXXXXXXXXX0119"}
随时随地看视频慕课网APP
我要回答