Я создаю Windows Phone Application 8.1 в Visual Studio 13. Я добавляю следующую строку кода в приложение для преобразования объекта в строку Json.
private string JsonString(object obj)
{
var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string jsonString = javaScriptSerializer.Serialize(obj);
return jsonString;
}
После добавления ссылки на строку кода, следующую ссылку dll необходимо добавить в ссылку:
System.Web
Syetem.Web.Extention
System.Web.ApplicationServices
И при создании следующего сообщения об ошибке, выведенного компилятором.
Не удается найти тип System.ComponentModel.TypeConverter в модуле System.dll
Я попытался добавить System.ComponentModel.dll
в ссылку на решение, но не смог его добавить из-за сообщения об ошибке:
System.ComponentModel.dll не удалось добавить, этот компонент уже автоматически ссылается на систему сборки.
Пожалуйста, помогите мне.
редактировать
Поскольку Stephan предложил Windows Phone 8.1 не поддерживать JavaScriptSerializer
, я создаю новый метод, который будет преобразовывать объект в строку json следующим образом:
public string JsonString<T>(T obj)
{
DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(T));
MemoryStream memStrm = new MemoryStream();
jsonSer.WriteObject(memStrm, (T)obj);
StreamReader reader = new StreamReader(memStrm);
string text = reader.ReadToEnd();
return text;
}
Но этот метод возвращает значение string.Empty
("") для любого объекта, пожалуйста, предложите мне изменения.
EDIT 2
Следующая строка кода работает отлично для меня:
public string JsonString<T>(T obj)
{
DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(T));
string jsonValue = string.Empty;
using (MemoryStream memStrm = new MemoryStream())
{
jsonSer.WriteObject(memStrm, obj);
byte[] jsonArray = memStrm.ToArray();
jsonValue = System.Text.Encoding.UTF8.GetString(jsonArray, 0, jsonArray.Length);
}
return jsonValue;
}
Похоже, вы перепутали JavaScript с Json. Класс System.Web.Script.Serialization.JavaScriptSerializer недоступен для Windows Phone в соответствии с документацией.
Платформы: Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows Server 2008 (роль сервера не поддерживается), Windows Server 2008 R2 (роль основного сервера, поддерживаемая с пакетом обновления 1 (SP1) или более поздней версии; не поддерживается)
Чтобы сериализовать/десериализовать объекты в JSON, вам лучше использовать класс DataContractJsonSerializer. Это поддерживается также на Windows Phone. DataContractJsonSerlializer в MSDN
Платформы: Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows Server 2008 (роль сервера не поддерживается), Windows Server 2008 R2 (Server Core Роль поддерживается с пакетом обновления 1 (SP1) или более поздней версии (Itanium) не поддерживается)
Я очень хорошо знаком с NewtonSoft Json Serializer aka Json.Net и очень рекомендую его, он доступен через nuget.
Product product = new Product{Name="Apple", Expiry=new DateTime(2008, 12, 28), Sizes = new string[]{"Small"}};
string json = JsonConvert.SerializeObject(product);
Это действительно все, что ему нужно :) Пример взят и немного изменен со своего сайта.
У вас есть связанный случай здесь, хотя и старый.
ура
DataContractJsonSerializer
?
DataContractSerializer
, и он, как правило, ломается, как фарфор. Json.Net действительно надежный.
Следующие методы работают для меня для Json to string
и string to Json
Serialization:
/// <summary>
/// Serialize object into Json string.
/// </summary>
/// <typeparam name="T">Type of object</typeparam>
/// <param name="obj">Object which need to convert.</param>
/// <returns>Json string</returns>
public string SerializeAsJsonString<T>(T obj)
{
var jsonSerializer = new DataContractJsonSerializer(typeof(T));
string jsonString = string.Empty;
using (var memStream = new System.IO.MemoryStream())
{
jsonSerializer.WriteObject(memStream, obj);
byte[] jsonArray = memStream.ToArray();
jsonString = System.Text.Encoding.UTF8.GetString(jsonArray, 0, jsonArray.Length);
}
return jsonString;
}
/// <summary>
/// Serialize Json string into object
/// </summary>
/// <typeparam name="T">Type of object</typeparam>
/// <param name="jsonString">Json string which need to parse into object</param>
/// <returns>Object of type T</returns>
public T DeserializeJsonString<T>(string jsonString)
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(jsonString);
using (var memStream = new System.IO.MemoryStream(data))
{
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(memStream);
}
}