.NET3.5 搭建WebApi 收到JSON请求转为对象其中的Dictionary无数据

.NET 3.5  搭建 REST 的WebApi

启动代码

class Program
    {
        static void Main(string[] args)
        {
            WebServiceHost svcHost = new WebServiceHost(typeof(WebApi));

            try
            {
                svcHost.Open();

                Console.WriteLine("Service is running");
                Console.WriteLine("Press enter to quit...");
                Console.ReadLine();

                svcHost.Close();
            }
            catch (CommunicationException cex)
            {
                Console.WriteLine("An exception occurred: {0}", cex.Message);
                svcHost.Abort();

            }
        }
    }

其中WebApi 及接口代码

[ServiceContract]
    public interface IWebApi
    { 
     [OperationContract]
     [WebInvoke(Method = "POST", UriTemplate = "/",RequestFormat = WebMessageFormat.Xml,ResponseFormat = WebMessageFormat.Json)]
     KT_Response Post(KT_Request request);
    } 
public class WebApi:IWebApi
    {
        #region IWebApi 成员

        public KT_Response Post(KT_Request request)
        {
            int i = request.transData.Count;

            return new KT_Response();
        }

        #endregion
    }

还有 自定义的请求参数类

[DataContract(Namespace = "http://666.com")]
    public class KT_Request
    {
        [DataMember]
        public string orgCode { get; private set; }
        [DataMember]
        public string orgEntCode { get; private set; }
        [DataMember]
        public string transNo { get;  private set; }
        [DataMember]
        public Dictionary<string,object> transData { get; set; }

    }

这是请求中的 JSON

{
	"orgCode": "6666",
	"orgEntCode": "9999",
	"transNo": "KKKYYY",
	"transData": {
		"hisAppoNo": "0001835908_7"
	}
}

过程说明:

服务启动正常,调用传入参数也是正常的,JSON也转为 KT_Request对象了,但其中的字典没有键值数据,

期望  transData["hisappoNo"]["0001835908_7"]  可以赋值上

如果不是在 REST WEBAPI 的程序中,引用 Newtonsoft.Json.dll ,自己编写代码 将JSON反序列  ,用里面的方法是可以达到 JSON 反序列化成Dictionary的,数据传递转化都是自己写代码控制。

但在这里情况不同,搭建 webapi 是使用 .NET 3.5 中的依赖库 完成 JSON 反序列成 对象的,都是 .NET 完成的,不可控制。(貌似 是  System.Web.Extensions.dll  中 JavaScriptSerializer.Deserialize() 方法实现的,MSDN https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer.deserialize?view=netframework-3.5)

 

请帮忙看看 ,在.NET 3.5 ,为了解决这个问题,

或者变通一下,transData 这个属性改成什么类型,

能把  "transData": {        "hisAppoNo": "0001835908_7"    } 当字符串的保存 进去。我额外再处理。

 

 

最懒的方法,前端直接把这个值JSON.stringify()转成string,然后后台以string接受后,JSONConvert.Deserialize转成一个类获得数据

"transData": [

{

 

"hisAppoNo": "0001835908_7"

 

}

]

 

这样试试