【问题标题】:ToJSON method not found - which namespace is required?未找到 ToJSON 方法 - 需要哪个命名空间?
【发布时间】:2015-09-24 06:29:14
【问题描述】:

我想将 .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);
            }

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api nlog


    【解决方案1】:

    没有这样的方法。 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 "";
                }
            }
        }
    }
    

    【讨论】:

    • System.Web.Script.Serialization;如何添加?
    • 阅读 codeproject 网站。 ...添加“System.Web.Extensions.dll”对项目的引用...
    • traceAction.Target.ToJSON()... 现在它工作正常。但是当它几乎将 [{}] 写入文件时,因为当我在运行时调试目标时将光标放在目标上时,它给了我 exp messageArguments {object1}。它在第零个元素中包含所需的数据。但我无法访问它。有什么办法得到吗?
    • 或者如果你已经使用 json.net - return JsonConvert.SerializeObject(obj);
    【解决方案2】:

    更好的方法是使用 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 2015-02-16
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多