我的应用程序中有这个课程:
public class Control
{
public int Id { get; set; }
public string Name { get; set; }
public string ControlDescription { get; set; }
public string ControlExceptionText { get; set; }
public string Color { get; set; }
public double DataRetrieving_Frequency { get; set; }
public double delay_Factor { get; set; }
public Boolean Disabled { get; set; }
}
我的json字符串是:
var result =
"[
{\"id\":16,\"name\":\"trest\",\"controlDescription\":null,\"controlExceptionText\":null,\"color\":\"#abdb2c\",\"dataRetrieving_Frequency\":0.0,\"delay_Factor\":0.0,\"disabled\":false},
{\"id\":15,\"name\":\"test\",\"controlDescription\":null,\"controlExceptionText\":null,\"color\":\"#441fed\",\"dataRetrieving_Frequency\":1440.0,\"delay_Factor\":10.0,\"disabled\":false},
{\"id\":14,\"name\":\"Powershell\",\"controlDescription\":\"text. \",\"controlExceptionText\":\"exception.\",\"color\":\"#ad89d7\",\"dataRetrieving_Frequency\":1440.0,\"delay_Factor\":10.0,\"disabled\":false}
]"
我希望将此json反序列化以适合我的Control class
。所以我这样做:
List<Control> test = JsonConvert.DeserializeObject<List<Control>>(result);
问题是test
会返回null
。
有什么想法吗?!
更新
Xamarin.Form
app。@
附加到JSON字符串的开头但是出现此错误解析值@时遇到意外的字符。
更新
我正在使用Xamarin Live Player查看我的应用程序,也许问题与此有关,因为许多开发人员都在抱怨在使用Live Player时序列化和反序列化错误。
答案 0 :(得分:0)
您的json字符串不正确。
JSON数据被写为名称/值对。
名称/值对由字段名称(双引号)组成, 然后是冒号,后跟一个值:
"name":"John"
从json字符串中删除反斜杠。对于将来,您可以检查json字符串here
的正确性答案 1 :(得分:0)
所以回答你的问题:你需要一个有效的JSON字符串来进行反序列化。从顶部的@
开始,将所有\"
替换为双引号。
更新编辑:@
符号应该在字符串之外,它不是JSON字符串的一部分,它只是一个指示您的字符串将是多行的。
答案 2 :(得分:0)
这对我来说很好。到目前为止,这是我尝试过的另一个示例,没有进行反序列化。 我收到一个JSON文件作为响应。我的JSON看起来像这样。
..我这样做是为了从JSON中获取每个元素。而且我已经将这些元素适合猴子列表。
using (JsonDocument document = JsonDocument.Parse(response, options))
{
Grid grid = new Grid();
Monkeys = new List<Monkey>();
foreach (JsonElement element in document.RootElement.EnumerateArray())
{
if (element.TryGetProperty("id", out JsonElement id)&&(element.TryGetProperty("end", out JsonElement end) )
&& (element.TryGetProperty("time", out JsonElement time) && (element.TryGetProperty("description", out JsonElement description)
&& (element.TryGetProperty("start", out JsonElement start) && (element.TryGetProperty("date", out JsonElement date))))))
{
Monkeys.Add(new Monkey
{
Time=time.ToString(),
Start = start.ToString(),
End =end.ToString(),
Description = description.ToString()
});
BindingContext = this;
}
}
}
这是我的猴子课
public class Monkey
{
public string Time { get; set; }
public string Start { get; set; }
public string End { get; set; }
public string Description { get; set; }
public string ImageUrl { get; set; }
public override string ToString()
{
return Start;
}
}