A JValue
sadece dizeleri, ints, Boolean, tarihleri ve benzeri gibi basit değer içerebilir. Karmaşık bir nesne içeremez.
List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = JToken.FromObject(list);
yukarıda, kullanıcılarını temsil eden JObjects
bir JArray
içine User
nesnelerin listesini dönüştürür ardından yeni JObject
üzerinde users
özelliğine o atayın: Ben gerçekten bulmak istediğiniz bu şüpheli. Bunu json["users"]
'un Type
özelliğini inceleyerek onaylayabilirsiniz ve bunun Array
olduğunu görün. Buna karşılık, başka bir yanıtta (şimdi silindi) önerildiği gibi json["users"] = new JValue(JsonConvert.SerializeObject(list))
yaparsanız, muhtemelen aradığınız sonucu alamazsınız. Bu yaklaşım, kullanıcıların listesini bir dizgeye serileştirecek, bundan basit bir JValue
oluşturacak ve JValue
, JObject
üzerindeki users
özelliğine atayacaktır. json["users"]
'un Type
özelliğini incelerseniz, bunun String
olduğunu görürsünüz. Bunun anlamı, daha sonra JObject
'u json.ToString()
kullanarak JSON'a dönüştürmeyi denerseniz, muhtemelen beklediğiniz JSON yerine çift serileştirilmiş çıktı alırsınız. İşte
farkı göstermek için kısa bir demo:
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; }
}
}
Çıktı:
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\"}]"
}
çalıştı kullanabilirsiniz! Teşekkürler – s0nica
Teşekkürler. Tüm günümü anlamaya çalışırken harcadığım şey buydu. – Trebor
mükemmel, neden bu cevap olarak işaretlenmiyor? – killernerd