我已经关注了
类型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;。
我做错了什么?
答案 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; }
}