2017-02-06 97 views
0

我對C#比較新,嘗試創建一個Web API Web服務,該服務以JSON格式返回Web服務器上文件夾的內容。Web API JSON Web服務顯示文件夾文件信息

這裏是我Fileinformation.cs類:

[DataContract] 
public class FileInformation 
{ 
    public FileInformation(string name, string mimeType, long size, DateTime lastModified) 
    { 
     this.name = name; 
     this.mimeType = mimeType; 
     this.size = size; 
     this.lastModified = lastModified; 
    } 

    public string name { get; set; } 
    [JsonProperty(PropertyName = "mime-type")] 
    public string mimeType { get; set; } 
    public DateTime lastModified { get; set; } 
    public long size { get; set; } 
} 

這裏是我的控制器:

public class ValuesController : ApiController 
{ 
    // GET api/values 
    public List<FileInformation> Get() 
    { 
     string ImageryFolder = @WebConfigurationManager.AppSettings["folderName"]; 
     string fileExtension = WebConfigurationManager.AppSettings["fileExtension"]; 

     DirectoryInfo d = new DirectoryInfo(ImageryFolder); 
     FileInfo[] Files = d.GetFiles("*."+ fileExtension); 
     var list = new List<FileInformation>(); 
     foreach (FileInfo fileInfo in Files) 
     { 
      string name = ImageryFolder + "\\" + fileInfo.Name; 
      Debug.WriteLine(name); 
      string mimeType = MimeMapping.GetMimeMapping(fileInfo.Name); 
      long size = fileInfo.Length; 
      DateTime lastModified = fileInfo.LastWriteTime; 
      FileInformation newFile = new FileInformation(name, mimeType, size, lastModified); 

      list.Add(newFile); 
     } 
     //var jsonResult = JsonConvert.SerializeObject(list); 
     return list; 
    } 
} 

我目前得到看起來像這樣的輸出,因爲有8個文件在它靠近該文件夾與它返回的FileInformation節點數量相同:

Output

+2

是你的問題*爲什麼我的屬性丟失了?*數據契約序列化是可選的。使用'[DataMember]'標記你的屬性或切換到[退出模型](http://stackoverflow.com/問題/ 19964866/DataContractSerializer的 - 是 - 一 - 選擇在串 - 如何對做-IT-退出)。或者是你的問題,*爲什麼我的服務返回XML?* – dbc

+1

@dbc D'哦!我知道......將[DataMember]添加到我的每個屬性都是解決方案。如果您添加它,我可以將其標記爲答案。謝謝! – Nate23VT

回答

1

數據合同序列在選擇從docs

應用DataContractAttribute屬性到在由DataContractSerializer的序列化和反序列化操作中使用的類型(類,結構,或枚舉)。

您還必須將DataMemberAttribute應用於包含要序列化值的任何字段,屬性或事件。通過應用DataContractAttribute,您可以顯式啓用DataContractSerializer以序列化和反序列化數據。

而且,儘管更新版本的asp.net-web-api使用Json.NET進行JSON序列化,Json.NET respects data contract attributes

[DataMember]標記您的房產或切換到opt-out serialization model