bir C# nesnesi yapmak için?Nasıl bir webcoder aşağıdaki yanıt almak json
Veya özelliklerin değerlerini almanın başka bir yolu var mı? Bu sitenin dışında
bir C# nesnesi yapmak için?Nasıl bir webcoder aşağıdaki yanıt almak json
Veya özelliklerin değerlerini almanın başka bir yolu var mı? Bu sitenin dışında
oldukça Önemsiz: o zaman
public class Root
{
public Dictionary<string, Data> Data { get; set; }
public bool Success { get; set; }
}
public class Data
{
public string Path { get; set; }
public int MinVersion { get; set; }
public int MaxVersion { get; set; }
}
ve:
string json =
@"{
""data"":{
""foo.hugo.info"": {
""path"": ""logon.cgi"",
""minVersion"": 1,
""maxVersion"": 2
},
""foo.Fritz.Task"": {
""path"": ""Fritz/process.cgi"",
""minVersion"": 1,
""maxVersion"": 1
}
},
""success"": true
}";
Root root = JsonConvert.DeserializeObject<Root>(json);
Ben 2 kompleks anahtarları (foo.hugo.info
ve foo.Fritz.Task
) çünkü modellemek için bir Dictionary<string, Data>
nesneyi kullanmış Bu örnekte .NET üyesi olarak kullanılamayan adlar içerir.
Reddetmenin herhangi bir nedeni var mı? Bu cevabın niçin yanlış olduğunu açıklayan bir oylamada lütfen yorum bırakın. –
Tam olarak ihtiyacım olanı yapar! Ayrıca bir sözlük kullanır ve ikiden fazla veri girişi yapabilir. Teşekkür ederim! – GreenEyedAndy
Kontrol: json dizesinde http://json2csharp.com/
Yapıştır ve sizin için sınıflar oluşturur. Ben genellikle Kök Nesnenin bir örneğini serileştirmek için JSON.NET ile birlikte kullanırım. JSON.NET
kütüphanesi ile
JSON.NET anasayfa: http://json.codeplex.com/ – valverij
Lütfen JSON'a daha dikkatli bir şekilde bakın ve 'foo.hugo.info' ve' foo.Fritz.Task' tuşlarını dikkat edin. Şimdi 'Data' sınıfı için önerdiğiniz sitenin ne işe yaradığını görünüz - işe yaramaz. –
İyi nokta. Siteyi daha önce kullanma konusunda sorun yaşamadım. Daha iyi cevabınız için +1. – stevepkr84
Yapabileceğiniz VS2012 veya yukarıda kullanıyorsanız aşağıdaki: En örnekle
Edit > Paste Special > Paste JSON As Classes
, bu sonuçlanır:
public class Rootobject
{
public Data data { get; set; }
public bool success { get; set; }
}
public class Data
{
public FooHugoInfo foohugoinfo { get; set; }
public FooFritzTask fooFritzTask { get; set; }
}
public class FooHugoInfo
{
public string path { get; set; }
public int minVersion { get; set; }
public int maxVersion { get; set; }
}
public class FooFritzTask
{
public string path { get; set; }
public int minVersion { get; set; }
public int maxVersion { get; set; }
}
OP'de gösterilen JSON'u bu sınıflara serpmek için hangi serileştiriciyi kullanacağınız hakkında herhangi bir kod örneği? Özellikle foohugoinfo ve fooFritzTask özellikleriyle ilgileniyorum. –
Bu, OP'nin sorusunu tam olarak cevaplayamayabilir, ama şunu söylemeliyim ... akıl = şişmiş. Şu ana kadar düzenleme menüsünün altında neler olduğuna dair hiçbir fikrim yoktu. –
Bu esnek değildir, üçüncü bir varyant eklenirse, başka bir sınıf oluşturmanız ve bunu "Data" sınıfına bir özellik olarak eklemeniz gerekir. – christiandev
kullanabilirsiniz DataContractJsonSerializer
[DataContract]
public class DetailedData
{
[DataMember(Name="path")]
public string Path { get; set; }
[DataMember(Name = "minVersion")]
public int MinVersion { get; set; }
[DataMember(Name = "maxVersion")]
public int MaxVersion { get; set; }
}
[DataContract]
public class Data
{
[DataMember(Name = "foo.hugo.info")]
public DetailedData Info { get; set; }
[DataMember(Name = "foo.Fritz.Task")]
public DetailedData Task { get; set; }
}
[DataContract]
public class RootObject
{
[DataMember(Name = "data")]
public Data Data { get; set; }
[DataMember(Name = "success")]
public bool Success { get; set; }
}
static void Main(string[] args)
{
string json = "...";
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(RootObject));
RootObject obj = (RootObject)js.ReadObject(new MemoryStream(Encoding.Unicode.GetBytes(json)));
Console.WriteLine(obj.Data.Task.MaxVersion);
}
Düzenleme: aynı sınıf Info
ve Task
"Bilgi" ve "Görev" için aynı sınıfı kullanmış olabilirsiniz. Bunun dışında iyi ve eksiksiz bir cevap, +1. –
Düzenlemeyi yeni bitirdim :) –
Bu iyi çalışıyor, ama yazmayı unuttum, bu veri: dinamik. Farklı öğelerin herhangi bir sayısı olabilir, ancak her zaman, yol, minimum ve maksimum üyeler ile. Sadece isimler (foo.hugo.info/foo.fritz.task) değişebilir. – GreenEyedAndy
Bunu seri hale getirmek mi istiyorsunuz? – Shaharyar
Bilgilerinizi programınıza aldıktan sonra ne yapmak istiyorsunuz? Onu bir nesneye dönüştürebilirken, hedefinize bağlı olarak kaçınabileceğiniz bir iş olabilir. –
Zaten bir JSON nesnesiniz var. C# nesnesine nasıl dönüştürüleceğini kastediyor musunuz? Eğer öyleyse 'path',' minVersion', 'maxVersion' özelliklerine sahip bir sınıf oluşturun ve serileştirmek için JSON.NET gibi bir şey kullanın. –