2012-09-20 56 views

回答

3

這似乎是一個非常奇怪的請求,但是,這是可能的。您可以創建自定義的MediaType格式是這樣的:

public class DcsXsFormatter : MediaTypeFormatter 
{ 
    public DataContractXmlFormatter() 
    { 
     SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml")); 
     SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml")); 
    } 

    public override bool CanWriteType(Type type) 
    { 
     return true; 
    } 

    public override bool CanReadType(Type type) 
    { 
     return true; 
    } 

    public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, 
                HttpContent content, 
                IFormatterLogger formatterLogger) 
    { 
     var task = Task<object>.Factory.StartNew(() => 
      { 
       var ser = new XmlSerializer(type); 
       return ser.Deserialize(readStream); 
      }); 

     return task; 
    } 

    public override Task WriteToStreamAsync(Type type, object value, 
            Stream writeStream, 
            HttpContent content, 
            TransportContext transportContext) 
    {    
     var task = Task.Factory.StartNew(() => 
      {      
       var ser = new DataContractSerializer(type); 
       ser.WriteObject(writeStream,value);      
       writeStream.Flush(); 
      }); 

     return task; 
    } 
} 

把它掛在Global.asax中:

//刪除現有XmlFormatter config.Formatters.Remove(config.Formatters.XmlFormatter);

// Hook in your custom XmlFormatter 
config.Formatters.Insert(0, new DcsXsFormatter()); 

但是,您爲什麼要這麼做?

+0

只是愚蠢的想法通過我的腦海:) –