反序列化原始JSON并转换为自定义C#对象

时间:2015-03-02 02:20:08

标签: c# json pubnub

我有以下原始JSON字符串:

[\"Hello World!\",\"94952923696694934\",\"MyChannel\"]

我没有运气试过以下内容:

我的自定义对象类:

public class MyObject
{
   public string msg { get; set; }
   public string id { get; set; }
   public string chn { get; set; }
}

JSON字符串:

string str = "[\"Hello World!\",\"94952923696694934\",\"MyChannel\"]";

首次使用 System.Web.Script.Serialization 进行去除血液的尝试:

JavaScriptSerializer serializer = new JavaScriptSerializer();
MyObject obj1 = serializer.Deserialize<MyObject>(str);

使用 Newtonsoft.Json 进行第二次去除血液的尝试:

MyObject obj2 = JsonConvert.DeserializeObject<MyObject>(str);

两次尝试均失败。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您有一个JSON数组字符串,而不是具有属性名称的对象。

所以你在这里做的最好是反序列化数组:

IEnumerable<string> strings =
    JsonConvert.DeserializeObject<IEnumerable<string>>(str);

...然后根据需要使用生成的序列strings

答案 1 :(得分:0)

使用PubNub,您只需传入本机字符串,字典或数组,我们将在发布端为您进行JSON编码,并在订阅方为您自动进行JSON解码。

答案 2 :(得分:0)

这是因为您的自定义对象&#39;并不等同于json表示。你反序列化的json只是C#中的string[](你也可以使用List<string>或其他IE)。

所以在代码中你正在寻找;

string[] theJson = JsonConvert.DeserializeObject<string[]>(str);

MyObject将用于以下json;

{
     "msg":"Hello World!",
     "id":"94952923696694934",
     "chn":"MyChannel"
}