Jak wziąć obiekt i przekonwertować go na ciąg JSON, a następnie wrócić do tego obiektu z łańcucha, w szczególności w WinRT dla mojej aplikacji Windows 8 Metro?Jak usunąć/serializować JSON w WinRT?
17
A
Odpowiedz
38
Jak to:
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
public static T Deserialize<T>(string json)
{
var _Bytes = Encoding.Unicode.GetBytes(json);
using (MemoryStream _Stream = new MemoryStream(_Bytes))
{
var _Serializer = new DataContractJsonSerializer(typeof(T));
return (T)_Serializer.ReadObject(_Stream);
}
}
public static string Serialize(object instance)
{
using (MemoryStream _Stream = new MemoryStream())
{
var _Serializer = new DataContractJsonSerializer(instance.GetType());
_Serializer.WriteObject(_Stream, instance);
_Stream.Position = 0;
using (StreamReader _Reader = new StreamReader(_Stream))
{ return _Reader.ReadToEnd(); }
}
}
5
najpierw wygenerować C# klas z http://json2csharp.com/ Następnie użyj http://james.newtonking.com/pages/json-net.aspx do parsowania
Moja klasa użytkownik aktualnie wygląda tak:
public class User
{
public string id { get; set; }
public string username { get; set; }
public string full_name { get; set; }
public string profile_picture { get; set; }
public string bio { get; set; }
public string website { get; set; }
public Counts counts { get; set; }
public static User SingleFromJSON(string jsonString)
{
return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
}
public static User MultipleFromJSON(string jsonString)
{
return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
}
private class SingleUser
{
public User data { get; set; }
}
private class MultipleUsers
{
public List<User> data { get; set; }
}
}
public class Counts
{
public int media { get; set; }
public int follows { get; set; }
public int followed_by { get; set; }
}
bardzo proste: D
+0
To na pewno inny sposób. Nie każdy lubi takie biblioteki na zewnątrz. Ale json.net jest bardzo szanowany. (i szybko) –
Powiązane problemy
- 1. Tworzenie zakładek w WinRT
- 2. WinRT - Windows Store - WinRT Originate Error - Jak rozszyfrować taki błąd?
- 3. DataContractSerializer w WinRT
- 4. HttpUtility.HtmlDecode w WinRT
- 5. Właściwość ClipToBounds w WinRT
- 6. Jak uzyskać rozmiar pliku w WinRT?
- 7. Jak narysować łuk w winRT z animacją?
- 8. Jak uzyskać aktualny język w aplikacji WinRT?
- 9. Jak uzyskać właściwości klasy w WinRT
- 10. Jak usunąć plik w localstorage na winrt?
- 11. Jak klonować UIElement w WinRT XAML C#?
- 12. Jak utworzyć hashe SHA-256 w WinRT?
- 13. Jak ustawić Timery w aplikacji WinRT?
- 14. Jak utworzyć dokument programu Word w WinRT
- 15. Wiązanie WinRT ImageSource z ciasteczkami
- 16. Bezwzględne współrzędne UIElement w WinRT
- 17. Makro do rozpoznawania WinRT?
- 18. AppBarButtonSyle dla WinRT
- 19. Wirtualizacja GridView Winrt
- 20. Wymiana WinRT dla System.ComponentModel.TypeConverter
- 21. Szyfrowanie strumienia WinRT
- 22. Obsługa obrazów WinRT
- 23. Dokumentacja typów przewidywanych WinRT
- 24. WinRT XAML niestandardowe przejście
- 25. WinRT SQLite Encryption
- 26. Jak otworzyć spakowany plik za pomocą WinRT
- 27. Jak uzyskać rozdzielczość ekranu? Dla aplikacji WinRT?
- 28. Jak obsługiwać wyjątki WinRT, które powodują wyjątek?
- 29. Jak owinąć bufor char * w WinRT IBuffer w C++
- 30. Dlaczego w WinRT jest wymagany DefaultOverloadAttribute?
DataContractJsonSerializer wymaga, aby klasy i członkowie zostali oznaczeni przez DataContract i DataMember. Json.net nie. Ta pierwsza jest bezpieczniejsza, ponieważ nie wszystkie klasy można w pełni odbudować z samych tylko ich właściwości. Ta ostatnia jest szybsza, ponieważ nie zawsze kontrolujesz obiekty, które serializujesz, a tworzenie klasyfikowalnej klasy pośredniej zajmuje trochę więcej czasu. – Tristan