JavaScriptSerializer.deserialize用逗号分隔的json字符串列表<string> </string>

时间:2015-03-08 14:49:32

标签: c# .net json

我已经关注了

类型
class ToDoElement{


 public int id;
    public string title;
    public string description;
    public List<string> tags;
}

我也有一些json字符串:

string msg = "{"title":"someTitle", "description":"someDescription", "tags": "tag1, tag2, tag3"}

当我试图通过JavaScriptSerializer解析它时:

System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer ();
ToDoElement o = js.Deserialize<ToDoElement> (msg);

我得到了异常

  

&#34;无法将字符串转换为List&#34;。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

此:

"tags": "tag1, tag2, tag3"

不是一个合适的JSON数组,它应该是这样的:

"tags: ["tag1", "tag2", "tag3"]

如果您无法更改JSON,则需要将其解析为中间对象。我将在这个例子中使用Json.NET:

dynamic intermediateObj = JsonConvert.DeserializeObject<dynamic>(msg); 
ToDoElement = new ToDoElement 
{
    Title = intermediateObj.title,
    Description = intermediateObj.description,
    Tags = intermediateObj.tags.Split(',').Select(str => str.Trim())
                                          .ToList();
}

注意我也添加了string.Trim电话。如果不需要,您可以将其删除。

答案 1 :(得分:1)

tags只是一个包含逗号分隔词的字符串:

 "tags": "tag1, tag2, tag3"

您需要反序列化到以下字段:

 public string tags;

稍后,您可以使用string.Split()string.Trim()进行拆分。

如果您仍希望在类中显示标记列表,则可以将"tags"属性反序列化为代理属性,如下所示:

class ToDoElement
{
    public int id;
    public string title;
    public string description;
    public string tags
    {
        get
        {
            if (TagList == null)
                return null;
            return string.Join(", ", TagList.ToArray());
        }
        set
        {
            if (value == null)
            {
                TagList = null;
                return;
            }
            TagList = value.Split(',').Select(s => s.Trim()).ToList();
        }
    }
    [ScriptIgnore]
    public List<string> TagList { get; set; }
}