我正面临着在JSON中序列化对象以匹配WCF函数调用的参数名称的问题.问题是映射参数名称,即传入的JSON字符串应该具有与函数中传递的参数相同的起始值,例如
"{\"GetComplexDataResult\":{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}}"
Run Code Online (Sandbox Code Playgroud)
这是我在我的客户端调用的WCF函数,你可以看到参数名称与返回的参数名称相同"GetComplexDataResult"
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
String SaveData(CompositeType GetComplexDataResult);
Run Code Online (Sandbox Code Playgroud)
发生的问题是当我尝试使用Microsoft System.Web.Script.Serialization.JavaScriptSerializer或任何其他库(例如Json.NET)序列化我的对象时
它只返回我,{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}即使我传递了同一类"CompositeType"的对象(这是客户端代码),例如
CompositeType GetComplexDataResult= new CompositeType();
GetComplexDataResult.BoolValue = true;
GetComplexDataResult.StringValue = "Hello World";
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(patchVersion);
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何获得这个JSON字符串
"{\"GetComplexDataResult\":{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}}"
Run Code Online (Sandbox Code Playgroud)
代替
{\"BoolValue\":true,\"StringValue\":\"Hello World!\"}
Run Code Online (Sandbox Code Playgroud)
只需将我的对象传递给JSON解析器即可.我可以在生成JSON字符串后手动连接它,但这会花费太多时间来处理工作.有没有解决这个问题的解析器.
如果使用参数名称作为属性名称来序列化匿名对象,它将包含在 json 字符串中。尝试这个:
string json = serializer.Serialize(new { GetComplexDataResult = patchVersion});
Run Code Online (Sandbox Code Playgroud)
另外,如果您根本不关心参数名称是否包含在 JSON 中,则可以将BodyStyle设为BodyStyle = WebMessageBodyStyle.Bare。
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |