我正在尝试在C#中读取JSON字符串(实际上,它更长,但只是为了显示结构...),这是我收到的字符串。
42["cti-agentes","{
\"6139\":{
\"id_agents_interface\":\"453\",
\"agent\":\"6139\",
\"interface\":\"contact1\",
\"logintime\":\"2019-11-26 15:08:46\",
\"pausetime\":\"2019-12-31 13:28:36\",
\"paused\":\"si\",
\"id_pausa\":null,
\"invalid\":\"no\",
\"invalidtime\":null,
\"fullcontact\":\"contact1\",
\"textoterminal\":\"contact1\"
},
\"6197\":{
\"id_agents_interface\":\"5743\",
\"agent\":\"6197\",
\"interface\":\"contact1\",
\"logintime\":\"2020-01-16 10:16:17\",
\"pausetime\":null,
\"paused\":\"no\",
\"id_pausa\":null,
\"invalid\":\"no\",
\"invalidtime\":null,
\"fullcontact\":\"contact2\",
\"textoterminal\":\"contact2\"
}
}"]
字符串应该是“代理”的数组。6139是具有所有属性的一种代理,而6197是另一种代理。在此示例中,只有两个代理,但是在实际字符串中,有许多代理。
我对JSON格式不是很熟悉,但是我尝试在此网站https://jsonformatter.curiousconcept.com/中对其进行验证,但是我无法使其正常工作,因此也许我必须稍微“清理”字符串解析之前有点吗?希望能对您有所帮助。
应用程序应该能够读取JSON字符串并将其解析为.NET对象,我尝试了JsonConvert.DeserializeObject()
和JArray.Parse()
函数,但它们对我来说都不起作用。
有什么帮助吗?
第一部分似乎是一个int,您可以通过多种方式将其删除:
var withoutNumberPrefix = new string(input.SkipWhile(c=> Char.IsDigit(c)).ToArray());
var fixedSize = input.Substring(2, input.Length - 2);
var always42 = input.TrimStart(new[] { '4', '2' });
完成后,您将拥有一个List<string>
,其中第一个值为类型,第二个为该类型的“数组”。
var listResults = JsonConvert.DeserializeObject<string[]>(fixedSize);
您可以反序列化第二部分:
var result = JsonConvert.DeserializeObject<Dictionary<int,CtiAgentes>>(listResults[1]);
转换为匹配类型,使用过去使用这些工具的简单副本创建的类型
如何从JSON字符串自动生成C#类文件:
public partial class CtiAgentes
{
[JsonProperty("id_agents_interface")]
public int IdAgentsInterface { get; set; }
[JsonProperty("agent")]
public int Agent { get; set; }
[JsonProperty("interface")]
public string Interface { get; set; }
[JsonProperty("logintime")]
public DateTimeOffset Logintime { get; set; }
[JsonProperty("pausetime")]
public DateTimeOffset? Pausetime { get; set; }
[JsonProperty("paused")]
public string Paused { get; set; }
[JsonProperty("id_pausa")]
public object IdPausa { get; set; }
[JsonProperty("invalid")]
public string Invalid { get; set; }
[JsonProperty("invalidtime")]
public object Invalidtime { get; set; }
[JsonProperty("fullcontact")]
public string Fullcontact { get; set; }
[JsonProperty("textoterminal")]
public string Textoterminal { get; set; }
}
在此Live演示中,您将注意到除了“删除42”之外没有任何字符串操作。不反斜杠不报价被修改。这是在字符串中硬编码的JSON将硬编码JSON字符串存储到变量中
诺塔好处:我用DateTimeOffset
了Pausetime
和Logintime
,因为那里有在输入端没有时区。您可以使用Datetime,但是很高兴知道它是gmt还是本地化数据。
对于所有空值,我选择了对象。因为我不知道类型 数据迟早会蓬勃发展。可以假设id是一个int值,而无效时间是一个DateTimeOffSet值,但是我无法做出决定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句