gpt4 book ai didi

c# - 不使用类的 JSON 反序列化? (网络服务客户端)

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:14 24 4
gpt4 key购买 nike

我试图解决 C# 更喜欢生成类的问题(我知道它们很容易生成,但目前由于客户端和服务器端的开发,我的格式和参数发生了很大变化)。

当我试图找出反序列化时,我最常发现的例子是,你首先必须知道确切的结构 - 然后构建一个类 - 然后你可以稍后引用它(这很好,但它只是不是我想做的):

Json格式一:

[{"FirstName":"Bob","LastName":"Johnson"},{"FirstName":"Dan","LastName":"Rather"}]

public class People 
{
public string FirstName { get; set; }
public string LastName { get; set;}
}

public List<People> peopleList;
. . . // (same as first example)
//Change the deserialize code to type <List<Class>>
peopleList = deserial.Deserialize<List<People>>(response);

当然这很容易,只要回复不改变格式,例如回复更改为嵌套字段:

Json格式2:

[{"FirstName":"Bob","LastName":"Johnson"},{"data":{"nestedfield1" :"ewr"} }]

我当然必须更改类来表示它,但目前我们在格式上来回移动,我希望有一种方法可以尝试直接访问字符串中的 json 元素?

例如,就像我可以在 Python 中做的那样:

mystring1 = reply ["firstName"] mystring2 = reply ["data"]["nestedfield1"]

有什么方法可以在 C# 中实现这一点?如果有一种方法可以访问它而无需首先引用代码中的输出然后再次引用在引用它时创建的类变量,那么它将迅速加快开发速度。

请注意,这是为了快速开发,不一定是为了最终实现,我可以通过类方法看到优势。

另一种询问方式是它是否可以序列化任何格式(只要它的 JSON)并动态构建一个结构,我可以在其中使用命名键而不是类变量来访问它?

最佳答案

要在不使用类的情况下反序列化 json,您可以使用 using Newtonsoft.Json

代码如下:

using System;
using Newtonsoft.Json;
using System.Text;

public class Program
{
public static void Main()
{
var myJSONString = "[{\"FirstName\":\"Bob\",\"LastName\":\"Johnson\"},{\"FirstName\":\"Dan\",\"LastName\":\"Rather\"}]";
dynamic obj = JsonConvert.DeserializeObject<dynamic>(myJSONString);
Console.WriteLine(obj[0].FirstName);
}
}

obj 将执行与生成类时相同的方式,它可以接受任何 json 字符串并反序列化为动态对象,而不管 json 的结构如何。请记住,您不会获得 VS 智能感知支持。

更新
这是 fiddle :
https://dotnetfiddle.net/xeLDpK

关于c# - 不使用类的 JSON 反序列化? (网络服务客户端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238648/

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