如何使Json.NET成为默认的Json序列化程序

Mic*_*ade 7 c# serialization json json.net

如果我有一个Web服务(.asmx)并且我希望它使用Json.NET来序列化我从该Web服务返回的所有对象,有没有办法做到这一点?

换句话说,我有一个这样的类:

    [JsonObject(MemberSerialization.OptOut)]
    public partial class Person
    {
        public string FirstName {get; set;}

        public string LastName {get; set;}

        [JsonIgnore]    
        public string Password {get; set;}    
    }
Run Code Online (Sandbox Code Playgroud)

在我的网络服务中,我有这个:

    [WebMethod]
    public Person GetBlahPerson()
    {
        Person p = new Person();
        p.FirstName = "bob";
        p.LastName = "smith";
        p.Password = "don't tell";

        return p;
    }
Run Code Online (Sandbox Code Playgroud)

如果使用jQuery我将返回类型设置为json,它将我的对象序列化为json.

是否可以通过web.config中的设置或类似的东西使它使用Json.net?

And*_*kin 1

只是 JSON——不。您只能IHttpHandlerFactory使用重新定义整体

<add verb="*" path="*.asmx" type="YourScriptHandlerFactory" validate="false"/>
Run Code Online (Sandbox Code Playgroud)

但这意味着您需要使用反射回退到默认实现,或者实现System.Web.Script.Services名称空间的模拟(相当大)。

实际上,我是通过反射回退来实现其他目的(集中错误处理),所以它应该是可能的,但它需要精度,并且在 .NET 版本之间会非常脆弱。

您使用经典的 ASP.NET 还是 MVC?如果你使用MVC,只需要使用一个控制器,就容易多了。