programing

현재 JSON 개체(예: {"name":"value"})를 '시스템' 유형으로 역직렬화할 수 없습니다.컬렉션포괄적인.리스트 1

kingscode 2023. 3. 22. 22:38
반응형

현재 JSON 개체(예: {"name":"value"})를 '시스템' 유형으로 역직렬화할 수 없습니다.컬렉션포괄적인.리스트 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Facebook;
using Newtonsoft.Json;

namespace facebook
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new FacebookClient(acc_ess);
            dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"});
            string jsonstring = JsonConvert.SerializeObject(result);

            //jsonstring {"data":[{"target_id":9503123,"target_type":"user"}]}
            List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);
        }

        public class Datum
        {
            public Int64 target_id { get; set; }
            public string target_type { get; set; }
        }

        public class RootObject
        {          
            public List<Datum> data { get; set; }
        }
    }
}

현재 JSON 개체(예: {"name":"value"})를 '시스템' 유형으로 역직렬화할 수 없습니다.컬렉션포괄적인.리스트1 [페이스북]Program+RootObject]'는 JSON 배열(예: [1, 2, 3])이 필요하기 때문입니다.이 오류를 수정하려면 JSON을 JSON 배열(예: [1, 2, 3])로 변경하거나 일반이 되도록 역직렬화 유형을 변경합니다.다음과 같은 NET 유형(예: 정수, 배열 또는 목록과 같은 수집 유형이 아님)

다른 글도 봤어요.

내 아들은 이렇게 생겼어

{"data":[{"target_id":9503123,"target_type":"user"}]}

명확히 하기 위해 @SLaks의 답변 외에 다음 행을 변경해야 합니다.

List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);

다음과 같은 방법으로 이행합니다.

RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);

이 에러 메세지는, 매우 알기 어렵기 때문에, 1개의 오브젝트를 컬렉션으로 역직렬화 할 수 없습니다( )List<>).

싱글로 역직렬화 하고 싶다.RootObject.

Json을 바꿔볼 수 있나요?data아래와 같은 키?

[{"target_id":9503123,"target_type":"user"}]

나도 그런 일이 있었어, 왜냐면 난 그 일을 겪으려고 노력했거든.IEnumerable하지만 그 반응은 하나의 값을 가지고 있었다.응답 데이터 목록인지 확인하십시오.문제를 해결하기 위해 사용한 (api url get) 행은 다음과 같습니다.

HttpResponseMessage response = await client.GetAsync("api/yourUrl");

if (response.IsSuccessStatusCode)
{
    IEnumerable<RootObject> rootObjects =
        awaitresponse.Content.ReadAsAsync<IEnumerable<RootObject>>();

    foreach (var rootObject in rootObjects)
    {
        Console.WriteLine(
            "{0}\t${1}\t{2}",
            rootObject.Data1, rootObject.Data2, rootObject.Data3);
    }

    Console.ReadLine();
}

도움이 됐으면 좋겠다.

진짜 문제는 Facebook Client Get 메서드에서 다이내믹 리턴 타입을 사용하고 있다는 것입니다.또한 직렬화 방법을 사용하더라도 JSON 변환기는 그 후 이 개체를 직렬화 해제할 수 없습니다.

설치 대상:

dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}); 
string jsonstring = JsonConvert.SerializeObject(result);

뭐 그런 거죠.

string result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}).ToString();

다음으로 DiserializeObject 메서드를 사용할 수 있습니다.

var datalist = JsonConvert.DeserializeObject<List<RootObject>>(result);

이게 도움이 됐으면 좋겠다.

public partial class tree
{
    public int id { get; set; }
    public string name { get; set; }
    public string sciencename { get; set; }
    public int familyid { get; set; }
}


private async void PopulateDataGridView()
{
    //For Single object response
    tree treeobj = new tree();
    treeobj = JsonConvert.DeserializeObject<tree>(Response);
    //For list of object response
    List<tree> treelistobj = new List<tree>();
    treelistobj = JsonConvert.DeserializeObject<List<tree>>(Response);
    //done
}

언급URL : https://stackoverflow.com/questions/21358493/cannot-deserialize-the-current-json-object-e-g-namevalue-into-type-sy

반응형