【发布时间】:2017-06-29 14:40:18
【问题描述】:
我正在尝试将包含如下 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): {对象}}
我也尝试过使用 JObject.Parse,但我得到了:
无效的 JavaScript 属性标识符字符:,。路径'',第 1 行, 位置 2。
你知道怎么做吗?我想避免用逗号分隔我的 JSON,并采用最简洁的方式。
【问题讨论】:
-
您的 userMessage 应该用大括号
{}而不是方括号[]括起来,因为这表明它是一个数组。然后它还需要属性名称。 -
尝试验证您的 JSOn:jsonformatter.curiousconcept.com
-
如果有办法将输入数据更改为有效的 JSON - 这将是最好的选择,否则需要自定义解析器来获取 {object}。
-
应该类似于:{ "TypeRequest": 2, "UniqueID": "2", "Action": "text", "Payload": {} }
-
我没有选择它由设备发送的消息,我应该准确地说对不起。