【问题标题】:Deserialize raw JSON and convert to custom C# Object反序列化原始 JSON 并转换为自定义 C# 对象
【发布时间】:2015-03-02 02:20:07
【问题描述】:

我有以下原始 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);

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

【问题讨论】:

    标签: c# json pubnub


    【解决方案1】:

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

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

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

    ...然后使用你认为合适的结果序列strings

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这是因为您的“自定义对象”不等同于 json 表示。您要反序列化的 json 只是 C# 中的 string[](您也可以使用 List&lt;string&gt; 或其他 IEum)。

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

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

        MyObject 将用于以下 json;

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-17
          • 1970-01-01
          • 1970-01-01
          • 2021-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多