【发布时间】:2015-04-06 13:07:28
【问题描述】:
我正在 Visual Studio 13 中创建 Windows Phone 应用程序 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;
}
【问题讨论】:
-
能否请您提一下如何从字符串中反序列化对象?
-
@Ali250 请参考下面我的回答。
标签: c# json dll windows-phone-8.1