小编Col*_*n B的帖子

如何提高.Net中的JSON反序列化速度?(JSON.net或其他?)

我们正在考虑通过JSON(WCF或其他)调用替换(部分或多个)'经典'SOAP XML WCF调用,因为它可以直接在Javascript中降低开销和易用性.目前,我们刚刚为我们的Web服务添加了一个额外的Json端点,并将WebInvoke属性添加到某些操作并对其进行了测试.一切正常,使用C#.Net客户端或Javascript客户端.到现在为止还挺好.

但是,似乎将大型JSON字符串反序列化为C#.Net中的对象要比反序列化SOAP XML慢得多.两者都使用DataContract和DataMember属性(完全相同的DTO).我的问题是:这是预期的吗?我们可以做些什么来优化这种性能?或者,我们是否应该仅针对较小的请求考虑JSON,我们会注意到性能的提高.

现在我们已经为这个测试选择了JSON.net,即使它没有在这个测试用例中显示,它应该比.Net JSON序列化更快.不知何故,ServiceStack反序列化根本不起作用(没有错误,IList返回null).

对于测试,我们进行服务电话以收集房间列表.它返回一个GetRoomListResponse,如果返回5个虚拟房间,JSON看起来像这样:

{"Acknowledge":1,"Code":0,"Message":null,"ValidateErrors":null,"Exception":null,"RoomList":[{"Description":"DummyRoom","Id":"205305e6-9f7b-4a6a-a1de-c5933a45cac0","Location":{"Code":"123","Description":"Location 123","Id":"4268dd65-100d-47c8-a7fe-ea8bf26a7282","Number":5}},{"Description":"DummyRoom","Id":"aad737f7-0caa-4574-9ca5-f39964d50f41","Location":{"Code":"123","Description":"Location 123","Id":"b0325ff4-c169-4b56-bc89-166d4c6d9eeb","Number":5}},{"Description":"DummyRoom","Id":"c8caef4b-e708-48b3-948f-7a5cdb6979ef","Location":{"Code":"123","Description":"Location 123","Id":"11b3f513-d17a-4a00-aebb-4d92ce3f9ae8","Number":5}},{"Description":"DummyRoom","Id":"71376c49-ec41-4b12-b5b9-afff7da882c8","Location":{"Code":"123","Description":"Location 123","Id":"1a188f13-3be6-4bde-96a0-ef5e0ae4e437","Number":5}},{"Description":"DummyRoom","Id":"b947a594-209e-4195-a2c8-86f20eb883c4","Location":{"Code":"123","Description":"Location 123","Id":"053e9969-d0ed-4623-8a84-d32499b5a8a8","Number":5}}]}
Run Code Online (Sandbox Code Playgroud)

Response和DTO看起来像这样:

[DataContract(Namespace = "bla")]
public class GetRoomListResponse
{
    [DataMember]
    public IList<Room> RoomList;

    [DataMember]
    public string Exception;

    [DataMember]
    public AcknowledgeType Acknowledge = AcknowledgeType.Success;

    [DataMember]
    public string Message;

    [DataMember]
    public int Code;

    [DataMember]
    public IList<string> ValidateErrors;
}

[DataContract(Name = "Location", Namespace = "bla")]
public class Location
{
    [DataMember]
    public Guid Id { get; set; }

    [DataMember]
    public int Number { get; set; }

    [DataMember]
    public string Code { …
Run Code Online (Sandbox Code Playgroud)

.net c# performance json json.net

43
推荐指数
2
解决办法
4万
查看次数

标签 统计

.net ×1

c# ×1

json ×1

json.net ×1

performance ×1