序列化JSON字符串以匹配WCF服务功能参数

adn*_*har 6 c# rest wcf json

我正面临着在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字符串后手动连接它,但这会花费太多时间来处理工作.有没有解决这个问题的解析器.

Jef*_*ata 3

如果使用参数名称作为属性名称来序列化匿名对象,它将包含在 json 字符串中。尝试这个:

string json = serializer.Serialize(new { GetComplexDataResult = patchVersion});
Run Code Online (Sandbox Code Playgroud)

另外,如果您根本不关心参数名称是否包含在 JSON 中,则可以将BodyStyle设为BodyStyle = WebMessageBodyStyle.Bare