2012-06-06 107 views
0

我正在使用发布canidate的MVC4 API。我得到一个内容类型:应用程序/ JSON时得到的错误我得到这个错误:'JsonNetFormatter'类型的媒体类型格式化程序不支持写入,因为它没有实现WriteToStreamAsync方法。没有实现WriteToStreamAsync方法

我确信我是!

public Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContent content, TransportContext transportContext) 
    { 
     var task = Task.Factory.StartNew(() => 
     { 
      var settings = new JsonSerializerSettings() 
      { 
       NullValueHandling = NullValueHandling.Ignore, 
      }; 

      string json = JsonConvert.SerializeObject(value, Formatting.Indented, 
                 new JsonConverter[1] { new IsoDateTimeConverter() }); 

      byte[] buf = System.Text.Encoding.Default.GetBytes(json); 
      stream.Write(buf, 0, buf.Length); 
      stream.Flush(); 
     }); 

     return task; 
    } 

我已经看到了重写此方法的例子,但我得到一个错误,有覆盖没有合适的方法。我猜这是一个版本的问题与System.Net.Http.Formatting.dll但我仔细检查过的版本,它看起来很不错:

// Type: System.Net.Http.Formatting.MediaTypeFormatter 
// Assembly: System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll 
+0

是的。签名从测试版改为RC。所以你的问题解决了? – Aliostad

+0

我不确定哪个是新界面。 “HttpContent”版本是将来使用的版本,对(不是“HttpContentHeaders”)? – Sebastian

回答

0

我取得了我是如何实现的方法是错误的。就像错误所说的一样。 HttpContent应该被HttpContentHeaders改为:

public override Task WriteToStreamAsync(Type type, object value, 
            Stream stream, 
            HttpContentHeaders content, 
            TransportContext transportContext)