我正在Visual Studio 13中创建Windows Phone Application 8.1。我在应用程序中添加以下代码行,以将对象转换为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.dll中找不到类型System.ComponentModel.TypeConverter
我尝试在解决方案的引用中添加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
(“”)值,请建议我更改。
编辑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;
}
答案 0 :(得分:3)
我非常感谢NewtonSoft's Json Serializer又称Json.Net,并强烈推荐它,它可通过nuget获得。
Product product = new Product{Name="Apple", Expiry=new DateTime(2008, 12, 28), Sizes = new string[]{"Small"}};
string json = JsonConvert.SerializeObject(product);
真的就是它的全部内容:)这个例子是从他们的网站上稍作修改的。
You have a linked case here, though old.
干杯
答案 1 :(得分:1)
好像你把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 SP2,Windows Server 2008(不支持服务器核心角色),Windows Server 2008 R2(SP1支持的服务器核心角色或稍后;不支持Itanium)
要将对象序列化/反序列化为JSON,最好使用DataContractJsonSerializer类。 Windows Phone也支持此功能。 DataContractJsonSerlializer at MSDN
平台:Windows Phone 8.1,Windows Phone 8,Windows 8.1,Windows Server 2012 R2,Windows 8,Windows Server 2012,Windows 7,Windows Vista SP2,Windows Server 2008(不支持服务器核心角色),Windows Server 2008 R2 (SP1或更高版本支持的服务器核心角色;不支持Itanium)
答案 2 :(得分:0)
以下方法适用于我Json to string
和string to Json
序列化:
/// <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);
}
}