>

다음 JSON을 C #으로 직렬화 해제하는 데 도움을 주시겠습니까?

[
  {
    "detectedLanguage": {
      "language": "en",
      "score": 10.0
    },
    "translations": [
      {
        "text": "",
        "to": "da"
      },
      {
        "text": "",
        "to": "da"
      }
    ]
  }
]

직렬화 해제에 다음 C # 클래스를 사용했지만 예외가 발생했습니다.

public class DetectedLanguage
{
    public string language { get; set; }
    public int score { get; set; }
}
public class Translation
{
    public string text { get; set; }
    public string to { get; set; }
}
public class RootObject
{
    public DetectedLanguage detectedLanguage { get; set; }
    public List<Translation> translations { get; set; }
}

직렬화 해제 코드는 다음과 같습니다.

var response = client.SendAsync(request).Result;
var jsonResponse = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<RootObject>(jsonResponse);

예외

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'RootObject' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. Path '', line 1, position 1.

  • 답변 # 1

    점수속성에 때때로 부동 값이 있지만 C # 클래스에는int데이터 유형이있어 예외가 발생합니다.@Ivan Salo님의 의견이 있기 전에는 알지 못했습니다.int데이터 형식을float로 변경하면 내 문제가 해결되었습니다. 또한 List를 사용하여 @Jon Skeet이 댓글 섹션에서 제안한 JSON을 역 직렬화했습니다.

    public class DetectedLanguage
    {
        public string language { get; set; }
        public float score { get; set; }
    }
    
    

  • 답변 # 2

    완전한 답변으로 편집 :

    using Newtonsoft.Json;
    class Program
    {
        public partial class RootObject
        {
            [JsonProperty("detectedLanguage")]
            public DetectedLanguage DetectedLanguage { get; set; }
            [JsonProperty("translations")]
            public Translation[] Translations { get; set; }
        }
        public partial class DetectedLanguage
        {
            [JsonProperty("language")]
            public string Language { get; set; }
            [JsonProperty("score")]
            public long Score { get; set; }
        }
        public partial class Translation
        {
            [JsonProperty("text")]
            public string Text { get; set; }
            [JsonProperty("to")]
            public string To { get; set; }
        }
        public partial class RootObject
        {
            public static RootObject[] FromJson(string jsonresponse) => JsonConvert.DeserializeObject<RootObject[]>(jsonresponse);
        }
        static void Main(string[] args)
        {
            var response = client.SendAsync(request).Result;
            var jsonResponse = response.Content.ReadAsStringAsync().Result;
            var result = RootObject.FromJson(jsonResponse);
            System.Console.WriteLine(result[0].DetectedLanguage.Language); //outputs "en"
        }
    }
    
    

  • 이전 delphi - 런타임시 라인의 그라디언트 시각화
  • 다음 R의 Stata tab 명령과 동일