繁体   English   中英

将没有属性名称的Json解析为C#

[英]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,无需使用JTokenJArrayJObject等低级类即可将其解析为对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM