当前位置: 首页 > 编程语言 > C#

Wson中的JsonConvert.DeserializeObject和“d”wrapper分享

时间:2023-04-10 13:34:20 C#

JsonConvert.DeserializeObject和Wson中的“d”wrapper我发现解析它有问题。如果我用JsonConvert.DeserializeObject(response)"{"d":"{"a0b70d2f-7fe4-4aa2-b600-066201eab82d":"Thelma","d56d4d4f-6029-40df-a23b-de27617a1e43":"Louise解析响应"}"}"我错了:在解析一个值后,遇到了一个意想不到的字符:a。第1行,位置9。如果我将响应更改为“{"a0b70d2f-7fe4-4aa2-b600-066201eab82d":"Thelma","d56d4d4f-6029-40df-a23b-de27617a1e43":"Louise"}"我明白了.那么我该如何解析来自WCF服务的这个“d”包装的JSON响应呢?有没有更好的方法来解析JSON?我假设您在您的行为配置中使用,将其替换为,您将获得没有“d”和“__type”的漂亮干净的json看起来您正在webHttpBinding上使用enableWebScript行为。您可能应该使用webHttp行为-这会为您提供“干净”的JSON而不是ASP.NETAJAX客户端JSON。将您的json粘贴到在线类生成器中,例如http://httputility.net/json-to-csharp-vb-typescript-class.aspx。它将为您提供反序列化此json对象的代码,如下所示(VB示例):D属性现在是一个字符串,其中包含您需要将其再次反序列化为最终接收对象的未包装的json。如果您不确定用哪个类来处理它,请将D中的字符串粘贴到同一个在线类生成器中,您将拥有创建接收对象类型所需的代码!现在我去掉了用Regex.Replace包裹的“d”,并用正确的结构修复了JSON响应{"Guid":"a0b70d2f-7fe4-4aa2-b600-066201eab82d","Name":"Thelma"}{"Guid":"d56d4d4f-6029-40df-a23b-de27617a1e43","Name":"Lousie"}"}我还创建了一个类,其中Guid和Name定义为字符串。然后尝试反序列化它反序列化它Listo=JsonConvert.DeserializeObject>(response);但我得到一个错误ExpectedaJsonObjectContractorJsonDictionaryContractfortype'System.Collections.Generic.List`1[mynamespace.myStruct]',got'Newtonsoft.Json.Serialization.JsonArrayContract'。Where'sthe技巧?如果你想切换到WebHttpBehavior并且仍然收到关于展开的主体元素的错误消息,请手动将你正在处理的方法的文字样式设置为Wrapped。这样做:[OperationContract(BodyStyle=WebMessageBodyStyle.Wrapped,...)]stringDoSomething(...)希望这有帮助!你可以有一个反序列化包装类,它有一个名为“d”的属性。一旦成功反序列化,然后从d属性中获取值..也许这有帮助。服务:namespaceApplication.Service{[ServiceBehavior(UseSynchronizationContext=false,ConcurrencyMode=ConcurrencyMode.Multiple,InstanceContextMode=InstanceContextMode.PerCall),AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]publicclassVendorService:IVendorService{publicListRetrieveMultiple(intstart,intlimit,stringsort,stringdir){//我不做任何手动序列化returnnewVendor();}}}合同:[ServiceContract(Namespace="Application.Service.Contracts")]publicinterfaceIVendorService{[OperationContract][WebInvoke(ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedRequest)]ListRetrieveMultiple(intstart,intlimit,字符串排序,字符串目录);我的svc文件只有这一行:Web.configfileaboveisC#learningTutorial:JsonConvert.DeserializeObjectand"d"wrapperinWson分享的所有内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: