找不到 ToJSON 方法 - 需要哪个命名空间?

ToJSON method not found - which namespace is required?

我想记录 .net WEB API 对新建文件的请求-响应。所以,我在我的项目中实现了 NLog 机制,效果很好。但仍然低于代码的 .ToJSON() 行没有得到解决。我无法弄清楚使用它需要哪个命名空间。有什么遗漏吗?

我指的是这两篇文章,但还是想不通。

1) http://www.codeproject.com/Articles/1028416/RESTful-Day-sharp-Request-logging-and-Exception-ha

2) http://www.strathweb.com/2012/06/using-nlog-to-provide-custom-tracing-for-your-asp-net-web-api/

.net 命名空间

using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http.Tracing;
using System.Net.Http;
using System.Text;

     if (level != TraceLevel.Off)
            {
                if (traceAction != null && traceAction.Target != null)
                {
                    category = category + Environment.NewLine + "Action     Parameters : " + traceAction.Target.ToJSON();  //this ToJSON doesn't get resolved. which namespace should I include? 
                }
                var record = new TraceRecord(request, category, level);
                if (traceAction != null) traceAction(record);
                Log(record);
            }

没有这种方法。 codeproject.com 中的示例向您展示了如何自己制作:

using System.Web.Script.Serialization;
using System.Data;
using System.Collections.Generic;
using System;


namespace WebApi.Helpers
{
    public static class JSONHelper
    {
        /// <summary>
        /// Extened method of object class, Converts an object to a json string.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ToJSON(this object obj)
        {
            var serializer = new JavaScriptSerializer();
            try
            {
                return serializer.Serialize(obj);
            }
            catch(Exception ex)
            {
                return "";
            }
        }
    }
}

更好的方法是使用JSON.Net。它很可能已经在您的项目中被引用并且 System.Web.Extensions.dll 现在已经很古老了(它的 performance is terrible):

public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
    if (level != TraceLevel.Off)
    {
        if (traceAction != null && traceAction.Target != null)
        {
            category = category + Environment.NewLine + "Action Parameters : " + JsonConvert.SerializeObject(traceAction.Target);
        }
        var record = new TraceRecord(request, category, level);
        if (traceAction != null) traceAction(record);
        Log(record);
    }
}