List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = new JValue(list);
작동하지 않는 것 같습니까?Json.Net에서 List <object>을 처리 할 수 있습니까?
오류 :
Could not determine JSON object type for type System.Collections.Generic.List`1
List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = new JValue(list);
작동하지 않는 것 같습니까?Json.Net에서 List <object>을 처리 할 수 있습니까?
오류 :
Could not determine JSON object type for type System.Collections.Generic.List`1
JValue
에만 문자열의 int, 부울, 날짜 등 같은 간단한 값을 포함 할 수 있습니다. 복잡한 객체를 포함 할 수 없습니다.
List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = JToken.FromObject(list);
위, 사용자를 대표하는 JObjects
의 JArray
로 User
개체의 목록을 변환합니다 다음 새 JObject
에 users
속성에 그 지정 : 나는 당신이 정말 원하는 것은 이것이다 생각한다. Type
속성이 json["users"]
인지 확인하고 Array
임을 확인하면이를 확인할 수 있습니다.
이와 대조적으로이 질문에 대한 다른 대답에서 제안한대로 json["users"] = new JValue(JsonConvert.SerializeObject(list))
을 입력하면 찾고있는 결과를 얻지 못할 수도 있습니다. 이 방법을 사용하면 사용자 목록이 문자열로 serialize되고 간단한 JValue
을 만든 다음 JObject
의 users
속성에 JValue
을 할당 할 수 있습니다. Type
속성이 json["users"]
인 것을 확인하면 String
이라는 것을 알 수 있습니다. 이것이 의미하는 바는 나중에 json.ToString()
을 사용하여 JObject
을 JSON으로 변환하려고하면 예상 한 JSON 대신 이중 직렬화 출력이 생성됩니다. 여기
class Program
{
static void Main(string[] args)
{
List<User> list = new List<User>
{
new User { Id = 1, Username = "john.smith" },
new User { Id = 5, Username = "steve.martin" }
};
JObject json = new JObject();
json["users"] = JToken.FromObject(list);
Console.WriteLine("First approach (" + json["users"].Type + "):");
Console.WriteLine();
Console.WriteLine(json.ToString(Formatting.Indented));
Console.WriteLine();
Console.WriteLine(new string('-', 30));
Console.WriteLine();
json["users"] = new JValue(JsonConvert.SerializeObject(list));
Console.WriteLine("Second approach (" + json["users"].Type + "):");
Console.WriteLine();
Console.WriteLine(json.ToString(Formatting.Indented));
}
class User
{
public int Id { get; set; }
public string Username { get; set; }
}
}
출력 :
First approach (Array):
{
"users": [
{
"Id": 1,
"Username": "john.smith"
},
{
"Id": 5,
"Username": "steve.martin"
}
]
}
------------------------------
Second approach (String):
{
"users": "[{\"Id\":1,\"Username\":\"john.smith\"},{\"Id\":5,\"Username\":\"steve.martin\"}]"
}
내가 가지고이 문제는, 당신은 지금 당신이 단지를 원하는 경우,이 작업이 완료 얻을 수는 jarray을 사용할 수 있습니다 루트 이름이없는 항목을 배열합니다. 당신이 "사용자"로 json으로 배열의 루트 이름을 원하는 경우
var json = JArray.FromObject(LoadUsers());
, 당신은 나를 위해
var json = new JObject { ["users"] = JToken.FromObject(LoadUsers()) };
이 근무 사용할 수 있습니다! 감사합니다 – s0nica
고마워요. 이것은 내가 하루 종일 알아 내려고 노력했던 것입니다. – Trebor
완벽합니다. 왜 이것이 답변으로 표시되지 않습니까? – killernerd