gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:40:09 25 4
gpt4 key购买 nike

我正在尝试将包含如下所示的 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);

但它不起作用我得到以下异常:

Invalid object passed in, ':' or '}' expected. (3): {Object}}

我也试过用 JObject.Parse 代替,我得到了:

Invalid JavaScript property identifier character: ,. Path '', line 1, position 2.

你知道怎么做吗?我想避免用逗号分隔我的 JSON,并使用最简洁的方法来完成它。

最佳答案

因为 {Object} 它不是真正有效的 JSON,所以我删除了它。从技术上讲,您可以执行 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 安装它:

安装包 Newtonsoft.Json


如果可以,我建议您修复 JSON 源,为您提供一个有效的 JSON,无需使用 JTokenJArray, JObject

关于c# - 将没有属性名称的 Json 解析为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com