C# JavaScriptSerializer.deserialize以逗号分隔的json字符串以列出<;字符串>;
我有下列类型C# JavaScriptSerializer.deserialize以逗号分隔的json字符串以列出<;字符串>;,c#,.net,json,C#,.net,Json,我有下列类型 class ToDoElement{ public int id; public string title; public string description; public List<string> tags; } 当我试图通过JavaScriptSerializer解析它时: System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script
class ToDoElement{
public int id;
public string title;
public string description;
public List<string> tags;
}
当我试图通过JavaScriptSerializer解析它时:
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer ();
ToDoElement o = js.Deserialize<ToDoElement> (msg);
System.Web.Script.Serialization.JavaScriptSerializer js=new System.Web.Script.Serialization.JavaScriptSerializer();
ToDoElement o=js.Deserialize(msg);
我有个例外
“无法将字符串转换为列表”
我做错了什么?
标记
只是一个字符串,里面有逗号分隔的单词:
"tags": "tag1, tag2, tag3"
您需要反序列化到以下字段:
public string tags;
以后,你可以和和分开
如果仍然希望类中显示标记列表,可以将“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; }
}
类ToDoElement
{
公共int id;
公共字符串标题;
公共字符串描述;
公共字符串标记
{
得到
{
如果(标记列表==null)
返回null;
返回字符串.Join(“,”,TagList.ToArray());
}
设置
{
如果(值==null)
{
标记列表=空;
返回;
}
TagList=value.Split(',')。选择(s=>s.Trim()).ToList();
}
}
[脚本忽略]
公共列表标记列表{get;set;}
}
这是:
"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();
}
动态中介bj=JsonConvert.DeserializeObject(msg);
ToDoElement=新的ToDoElement
{
Title=intermediateObj.Title,
Description=intermediateObj.Description,
Tags=intermediateObj.Tags.Split(',')。选择(str=>str.Trim())
.ToList();
}
注意,我还添加了字符串.Trim
调用。如果不需要,可以将其删除
dynamic intermediateObj = JsonConvert.DeserializeObject<dynamic>(msg);
ToDoElement = new ToDoElement
{
Title = intermediateObj.title,
Description = intermediateObj.description,
Tags = intermediateObj.tags.Split(',').Select(str => str.Trim())
.ToList();
}