我有一个WCF服务定义如下:
Imports System.ServiceModel
Imports System.ServiceModel.Web
<ServiceContract()>
Public Interface ILayoutService
<OperationContract()>
<WebInvoke(Method:="POST",
BodyStyle:=WebMessageBodyStyle.WrappedRequest,
RequestFormat:=WebMessageFormat.Json,
ResponseFormat:=WebMessageFormat.Json)>
Sub SaveLayout(ByVal layout As Layout)
<OperationContract()>
Function GetLayout() As Layout
End Interface
所述Layout
类的定义为:
Imports System.Runtime.Serialization
<DataContract()>
Public Class Layout
<DataMember()>
Public Property Columns As New List(Of ContentColumn)
End Class
<DataContract()>
Public Class ContentColumn
<DataMember()>
Public Property Name As String = "Column Name"
<DataMember()>
Public Property Position As Integer
<DataMember()>
Public Property Modules As New List(Of ContentModule)
End Class
<DataContract()>
Public Class ContentModule
<DataMember()>
Public Property Name As String = "Module Name"
<DataMember()>
Public Property Position As Integer
End Class
ILayoutService的实现如下:
Imports System.ServiceModel.Activation
Imports System.Web.Script.Serialization
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Required)>
Public Class LayoutService
Implements ILayoutService
Public Sub SaveLayout(ByVal layout As Layout) Implements ILayoutService.SaveLayout
Dim l As New Layout
Dim left, center, right As New ContentColumn
left.Name = "Left Column"
left.Position = 0
center.Name = "Center Column"
center.Position = 1
right.Name = "Right Column"
right.Position = 2
Dim topLeft, centerLeft, bottomLeft, topCenter, centerCenter, bottomCenter, topRight, centerRight, bottomRight As New ContentModule
topLeft.Name = "Top Left"
topLeft.Position = 0
centerLeft.Name = "Center Left"
centerLeft.Position = 1
bottomLeft.Name = "Bottom Left"
bottomLeft.Position = 2
topCenter.Name = "Top Center"
topLeft.Position = 0
centerCenter.Name = "Center Center"
centerCenter.Position = 1
bottomCenter.Name = "Bottom Center"
bottomCenter.Position = 2
topRight.Name = "Top Right"
topRight.Position = 0
centerRight.Name = "Center Right"
centerRight.Position = 1
bottomRight.Name = "Bottom Right"
bottomRight.Position = 2
left.Modules.Add(topLeft)
left.Modules.Add(centerLeft)
left.Modules.Add(bottomLeft)
center.Modules.Add(topCenter)
center.Modules.Add(centerCenter)
center.Modules.Add(bottomCenter)
right.Modules.Add(topRight)
right.Modules.Add(centerRight)
right.Modules.Add(bottomRight)
l.Columns.Add(left)
l.Columns.Add(center)
l.Columns.Add(right)
Dim json As New JsonResult
json.Data = l
Dim serializer As New JavaScriptSerializer
Dim output = serializer.Serialize(json.Data)
End Sub
Public Function GetLayout() As Layout Implements ILayoutService.GetLayout
Dim l As New Layout
Dim c As New ContentColumn
Dim m As New ContentModule
c.Modules.Add(m)
l.Columns.Add(c)
Return l
End Function
End Class
我实现了,SaveLayout()
所以我可以得到将被(反)序列化的原义JSON。我正在使用它来测试通过jQuery调用此服务:
$(document).ready(function () {
$("#saveLayout").click(function () {
var layout = buildLayout();
var jsonLayout = $.toJSON(layout);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
url: "/Services/LayoutService.svc/SaveLayout",
data: jsonLayout,
dataType: "json",
success: function (result) {
alert(result.d.Columns[0].Name);
},
error: function (xhr, ajaxOptions, thrownError) {
var jsonFault = JSON.parse(xhr.responseText);
alert(jsonFault.Message);
}
});
return false;
});
});
function buildLayout() {
var layout = { "Columns": [
{ "Name": "Left Column", "Position": 0, "Modules": [
{ "Name": "Top Left", "Position": 0 },
{ "Name": "Center Left", "Position": 1 },
{ "Name": "Bottom Left", "Position": 2}]
},
{ "Name": "Center Column", "Position": 1, "Modules": [
{ "Name": "Top Center", "Position": 0 },
{ "Name": "Center Center", "Position": 1 },
{ "Name": "Bottom Center", "Position": 2}]
},
{ "Name": "Right Column", "Position": 2, "Modules": [
{ "Name": "Top Right", "Position": 0 },
{ "Name": "Center Right", "Position": 1 },
{ "Name": "Bottom Right", "Position": 2}]
}]
};
return layout;
}
返回的布局buildLayout()
是serialize()
VB代码中调用返回的确切JSON
。出于某种原因,当我调用Web服务,输入参数layout
在SaveLayout()
什么都不是。反序列化一定会失败。知道为什么吗?
仅凭您提供的细节很难分辨。
这是我的建议:
在服务端启用跟踪,生成跟踪日志,并使用SvcTraceViewer进行分析。为此,请按照MSDN上有关使用服务跟踪查看器的文章中的说明进行操作。
打开调试异常。这可以通过上载includeExceptionDetailInFaults来完成,您可以按照此处的说明进行操作。
使用Fiddler监视客户端和服务端的有线通信。
通常,一旦执行此操作,您就应该在服务端获取更多有关时髦事件的信息,并且可以很快地诊断出问题。尝试一下,请报告!:)
问题内容: 我对WCF有点陌生,将尝试清楚地描述我要做什么。 我有一个使用JSON请求的WCF Web服务。我在大多数情况下都可以很好地发送/接收JSON。例如,以下代码可以正常运行,并且符合预期。 JSON已发送: WCF: 这将按预期返回带有“ Dave”的JSON对象。问题是我无法始终保证我收到的JSON与我的DataContract中的成员完全匹配。例如,JSON: 由于大小写不匹配,将无
本文向大家介绍wcf WCF中的序列化,包括了wcf WCF中的序列化的使用技巧和注意事项,需要的朋友参考一下 示例 序列化是将对象转换为字节流以存储对象或将其传输到内存,数据库或文件的过程。Microsoft页面序列化 下面的示例演示了WCF中的序列化: [DataContract]属性与类一起使用。在这里,它装饰有Person阶级。 [OperationContract]用于方法。在这里用Ad
问题内容: 是否可以替换WCF的默认JSON序列化(我目前正在测试行为),并作为MIME类型传递。特别是,我不喜欢默认情况下每个属性都是键/值对,例如: 我仅将服务用于启用JSON的端点(使用jQuery + WCF请求数据)。 问题答案: 您可以使用消息格式化程序来更改用于处理JSON的序列化程序。https://docs.microsoft.com/zh- cn/archive/blogs/c
问题内容: 我有以下JSON字符串要反序列化: 我正在使用DataContractJsonSerializer方法。 它由项目数组组成,我找不到使用VB.Net可以反序列化此结构的示例。我具有以下Application类来存储此信息: 问题答案: 我建议你使用过。原因如下: 更快 比简单的序列化需要更多的代码。 您无需将and 属性与 使用此数据类 并使用它反序列化您的: 如果仍要使用,则可以使用
我有一个简单的问题,假设我有这个json 以这种方式映射: 我想知道是否可以通过使用一些自定义setter/注释或其他东西在内部对象中保存一个外部字段: PS:由于json的复杂性,使用自定义反序列化是我最后的选择
我想解析这个json文件。 {“特征”:[{“类型”:“特征”,“几何”:“{“类型”:“多边形”,“坐标”:[[26.4217861898109,40.127607984644],[26.4219934821323,40.1275230229872],[26.4218810759267,40.1273800013679],[26.4216801413981,40.1274730404221],[