2016-04-19 16 views
-1

Hallo Leute Könnten Sie mir helfen? Ich habe die Klasse unterWie jersonconvert newtonsoft deserialisieren?

public class EmpTraining 
{ 
    public int CodColig { get; set; } 
    public string EmpID { get; set; } 
    public string Employee { get; set; } 
    public string CostCenter { get; set; } 
    public string Department { get; set; } 
    public string WorkstationID { get; set; } 
    public string Workstation { get; set; } 
    public string Training { get; set; } 
    public string CreateDt { get; set; } 
    public string DueDt { get; set; } 
} 

Und ich muss das JSer unten deserialize.

{ 
    "EmployeesTrainings": [ 
    { 
     "CODCOLIGADA": 1, 
     "CHAPA": "sample string 2", 
     "NOME": "sample string 3", 
     "CCUSTO": "sample string 4", 
     "Departamento": "sample string 5", 
     "CODPOSTO": "sample string 6", 
     "POSTO": "sample string 7", 
     "TREINAMENTO": "sample string 8", 
     "REALIZADO_EM": "2016-04-19T14:17:19.7291778-03:00", 
     "VALIDADE": "2016-04-19T14:17:19.7291778-03:00" 
    }, 
    { 
     "CODCOLIGADA": 1, 
     "CHAPA": "sample string 2", 
     "NOME": "sample string 3", 
     "CCUSTO": "sample string 4", 
     "Departamento": "sample string 5", 
     "CODPOSTO": "sample string 6", 
     "POSTO": "sample string 7", 
     "TREINAMENTO": "sample string 8", 
     "REALIZADO_EM": "2016-04-19T14:17:19.7291778-03:00", 
     "VALIDADE": "2016-04-19T14:17:19.7291778-03:00" 
    } 
    ], 
    "HasErrors": true, 
    "Errors": [ 
    "sample string 1", 
    "sample string 2" 
    ] 
} 

Ändern Sogar den Namen der Variablen der Fehler

nicht die aktuelle JSON-Objekt deserialisieren Kann geschieht halten (zB { "name": "Wert"}) in Typ ‚System.Collections .Generic.List`1 [Foxconn.Portal.Model.HR.Training.EmpTraining] ' , da der Typ ein JSON-Array benötigt (z. B. [1,2,3]), um korrekt zu deserialisieren.

diese Fehler zu beheben, die entweder zu einer JSON JSON Array ändern (zB [1,2,3]) oder dem deserialisierten Typ ändern, so dass es ein normaler .NET Typ (zB keinen Urtyp wie ganzer Zahl ist , kein Sammlertyp wie ein Array oder eine List), der von einem JSON-Objekt deserialisiert werden kann. JsonObjectAttribute kann auch zum Typ hinzugefügt werden, um es auf deserialize von einem JSON-Objekt zu erzwingen.

Pfad 'EmployeesTrainings', Zeile 1, Position 22.

Der Code, um die Klasse deserialisieren ruft ist:

public static List<EmpTraining> List(int codColig, string empID, string trainingID, string workstationID, string status, int? days) 
    { 


     List<EmpTraining> empList = Api.PostWebApiStr<List<EmpTraining>>(JSON, webApi, Token, timeOut); 

     if (empList.Count > 0) 
      return empList; 

     return new List<EmpTraining>(); 

    } 

die Klasse, die ich deserialisieren bin ist, dass eine darunter.

public static T PostWebApiStr<T>(string data, Uri webApiUrl, Token token, int timeout) 
     { 

      using (var client = new ExtendedWebClient(webApiUrl, timeout)) 
      { 
       try 
       { 

        client.Headers[HttpRequestHeader.ContentType] = "application/json"; 

        if (token != null) 
        { 
         client.Headers[HttpRequestHeader.Authorization] = string.Format("{0} {1}", token.TokenType, token.AccessToken); 
        } 

        var response = client.UploadString(webApiUrl, data); 

        return JsonConvert.DeserializeObject<T>(response); 

       } 
       catch (WebException ex) 
       { 

        throw new Exception(ex.Message); 
       } 
      } 
     } 
+0

Es gibt keine Ähnlichkeit zwischen Ihrer Klasse und dem JSON. Sie haben auch keinen Code zum Mappen angezeigt. Also, was ist deine Frage? – Eser

+0

Welchen Teil der Fehlermeldung verstehen Sie nicht? – SLaks

+0

Was führen Sie aus, dass der Fehler generiert? Sie zeigen nur die Deklarationen der Klasseneigenschaften an. – romellem

Antwort

1

Hallo Sie müssen wahrscheinlich die unter Klasse verwenden, um Ihre JSON-Daten zu Klassenobjekt

public class EmployeesTraining 
{ 
    public int CODCOLIGADA { get; set; } 
    public string CHAPA { get; set; } 
    public string NOME { get; set; } 
    public string CCUSTO { get; set; } 
    public string Departamento { get; set; } 
    public string CODPOSTO { get; set; } 
    public string POSTO { get; set; } 
    public string TREINAMENTO { get; set; } 
    public string REALIZADO_EM { get; set; } 
    public string VALIDADE { get; set; } 
} 

public class RootObject 
{ 
    public List<EmployeesTraining> EmployeesTrainings { get; set; } 
    public bool HasErrors { get; set; } 
    public List<string> Errors { get; set; } 
} 

Sie könnten dann für accesing einzelne Mitarbeiter Details


durch EmployeeTrainings Liste aussehen zu konvertieren

Verwenden Sie den folgenden Link, um Ihre JSON-Daten in C# -Klassen zu konvertieren http://json2csharp.com/

1

Sie können attributes verwenden Sie den Namen der serialisierten Felder zu ändern:

public class EmpTraining 
{ 
    [JsonProperty('CODCOLIGADA')] 
    public int CodColig { get; set; } 
    [JsonProperty('CHAPA')] 
    public string EmpID { get; set; } 
    [JsonProperty('NOME')]  
    public string Employee { get; set; } 
    [JsonProperty('CCUSTO')]    
    public string CostCenter { get; set; } 
    [Jsonproperty('Departamento')] 
    public string Department { get; set; } 
    [JsonProperty('CODPOSTO'] 
    public string WorkstationID { get; set; } 
    [JsonProperty('POSTO')] 
    public string Workstation { get; set; } 
    [JsonProperty('TREINAMENTO')] 
    public string Training { get; set; }  
    [JsonProperty('REALIZADO_EM')] 
    public string CreateDt { get; set; } 
    [JsonProperty('VALIDADE')] 
    public string DueDt { get; set; } 
} 

Aber die Fehlermeldung Sie Ihr Problem angegeben wird, stimmt nicht richtig erklären. Dort heißt es:

kann nicht die aktuelle JSON-Objekt deserialisieren (zB { "name": "Wert"}) in den Typ 'System.Collections.Generic.List`1 [CoderwallDotNet.Api.Models.Account]'

so scheint es ein anderes Problem zu geben, das nicht beantwortet werden kann. Bitte geben Sie Ihren vollständigen Codebeispiel an, anderenfalls würden Sie nur raten.

+0

Danke! Ich habe es zusammen mit der ersten Antwort benutzt! – Shikaizi

Verwandte Themen