[英]Parse Json without property names to C#
我试图将包含如下所示JSON的字符串解析为C#对象: 我知道它不是真正有效的json,但我不能选择它,它是由设备发送的。 这就是为什么我试图用{}替换[]使其看起来像一个有效的对象。
[2, "2", "text", {Object}]
我创建了以下课程:
public class MyClass
{
[JsonProperty(Order = 0)]
public int TypeRequest { get; set; }
[JsonProperty(Order = 1)]
public string UniqueID { get; set; }
[JsonProperty(Order = 2)]
public string Action { get; set; }
[JsonProperty(Order = 3)]
public JObject Payload { get; set; }
}
我想稍后解析{Object}(我首先需要了解“ Action”属性,因为对象取决于操作)。
到目前为止,我已经完成了:
string userMessage = "[2, "2", "text", {Object}]";
if (userMessage.Length > 2)
{
// We need to remove the first [ and the last ] to be able to parse into a json object
StringBuilder sb = new StringBuilder(userMessage);
sb[0] = '{';
sb[sb.Length - 1] = '}';
userMessage = sb.ToString();
}
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
MyClass objectJSON = jsonSerializer.Deserialize<MyClass >(userMessage);
但这不起作用,但出现以下异常:
传入无效的对象,应为':'或'}'。 (3):{Object}}
我也尝试使用JObject.Parse代替,我得到了:
无效的JavaScript属性标识符字符:,。 路径'',第1行,位置2。
你知道怎么做吗? 我想避免必须用逗号分隔JSON并采用最干净的方法。
由于{Object}
,它实际上不是有效的JSON,因此我将其删除。 从技术json.Replace("{Object}", "something else")
您可以执行json.Replace("{Object}", "something else")
以使其变得更容易。 因为您处理数组中的不同类型,所以它可能不是一步一步的过程。 这是给您的一个主意:
var json = "[2, \"2\", \"text\"]";
var array = JsonConvert.DeserializeObject<JArray>(json);
foreach (var item in array)
{
switch (item.Type)
{
case JTokenType.Integer:
// todo: your parsing code
break;
case JTokenType.String:
break;
// etc.
}
}
我使用JSON.NET库解析JSON。 您可以使用nuget安装它:
Install-Package Newtonsoft.Json
如果可以,我建议您修复JSON源,以为您提供有效的JSON,无需使用JToken
, JArray
, JObject
等低级类即可将其解析为对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.