在模块System.dll,Windows Phone 8.1中找不到类型System.ComponentModel.TypeConverter

时间:2014-09-29 10:48:19

标签: c# json dll windows-phone-8.1

我正在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;
}

3 个答案:

答案 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。

JavaScriptSerializer at MSDN

  

平台: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 stringstring 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);
    }
}