gpt4 book ai didi

c# - 使用 JSON.net 反序列化 JSON Stream

转载 作者:行者123 更新时间:2023-11-30 22:35:36 24 4
gpt4 key购买 nike

我最近从使用 SOAP 转向使用 JSON。我现在遇到性能问题,因为在我的 WP7 设备上反序列化 JSON 流大约需要 26 秒。

因此我想到了使用 Json.net 而不是 DataContractJsonSerializer。

但是,我无法找到有关此的太多信息。

我使用网络客户端,然后使用 OpenReadAsync,所以我有一个 Stream 作为 e.Result。

如何使用 Json.net 将该流转换为对象?

我是否应该改用 DownloadStringAsync?

这是目前有效的代码:

//string URL = ""; //Actual URL to JSON is here

WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri(URL, UriKind.Absolute));

和事件处理程序:

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JSONObject), null);
JSONObject data = serializer.ReadObject(e.Result) as JSONObject;
}

JSONObject 是服务的 SOAP 端点的响应对象,但两个端点返回相同的数据。

这工作正常,我可以像解析 SOAP 响应一样继续解析数据,但我希望它反序列化速度更快。

最佳答案

为了反序列化,您需要整个 JSON。最好使用 DownloadStringAsync,一旦收到整个 JSON 字符串,就可以反序列化它。

然后在您的 DownloadStringCompleted 中,您可以传入要将其反序列化到的类。例如,如果您接收到如下 JSON:

{ name: "smoak", title: "super awesome" }

然后您需要创建一个具有这些属性的类:

class SomeClassName 
{
publc string name { get;set;}
public string title { get;set; }
}

并将其传递给 JsonConvert:

var deserializedObj = JsonConvert.DeserializeObject<SomeClassName>(e.Result);
Console.WriteLine(deserializedObj.name);

关于c# - 使用 JSON.net 反序列化 JSON Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393512/

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