【问题标题】:Anonymous return in ASP.Net WebServiceASP.Net WebService 中的匿名返回
【发布时间】:2014-04-01 05:06:44
【问题描述】:

我创建了一个 webservice 函数,它返回一个对象(匿名 linq 结果)

    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public object GetUser()
    {
        List<string> users = new List<string>
        {
            "Nora Aunor",
            "Pilita Corrales"
        };

        var result = users.Select(u => new
            {
                Name = u,
                Birthdate = DateTime.Now
            })
            .ToList();

        var retVal = new
        {
            Data = result,
            Count = result.Count
        };

        return retVal;
    }

如果我使用 Fiddler 来获取响应,它会返回符合我预期的数据

但是如果我使用浏览器,它只会返回一个错误

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: &lt;&gt;f__AnonymousType2`2[System.Collections.Generic.List`1[&lt;&gt;f__AnonymousType1`2[System.String,System.DateTime]],System.Int32] cannot be serialized because it does not have a parameterless constructor.
   at System.Xml.Serialization.TypeDesc.CheckSupported()
   at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError)
   at System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type)
   at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_anyType(Object o)
   at Microsoft.Xml.Serialization.GeneratedAssembly.ObjectSerializer1.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
   at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
   at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
   at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
   at System.Web.Services.Protocols.WebServiceHandler.Invoke()

问题:如何将匿名方法的结构+数据显示成json,这样会在浏览器中显示出来

{
    "d": {
        "Data": [{
            "Name": "Nora Aunor",
            "Birthdate": "\/Date(1393578983512)\/"
        },
        {
            "Name": "Pilita Corrales",
            "Birthdate": "\/Date(1393578983512)\/"
        }],
        "Count": 2
    }
}

或默认的 XML 结果。

提前致谢

【问题讨论】:

标签: c# asp.net json web-services asmx


【解决方案1】:

错误是Content-Type 标头。尝试从 Fiddler 的请求中删除它,您会看到相同的异常。浏览器不发送Content-Type: application/json 它并且您的网络服务尝试返回 XML 序列化对象并失败。这通常是 ASP.NET 安全策略。查看此url 了解更多信息

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多