2017-02-06 14 views
0

私は比較的新しいC#で、JSON形式のWebサーバー上のフォルダの内容を返すWeb API 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]'でマークするか、[opt-out model](http://stackoverflow.com/質問/ 19964866/datacontractシリアル化 - オプトインシリアライザ - 作成方法 - オプトアウト)。または、あなたの質問です*なぜ私のサービスはXMLを返すのですか? – dbc

+1

@dbc D'oh!私はそれを知っていました...それぞれのプロパティに[DataMember]を追加するのが解決策でした。あなたがそれを追加すれば答えとしてマークすることができます。ありがとう! – Nate23VT

答えて

1

データコントラクトのシリアル化がオプトインですdocsから:。

は、DataContractSerializerによってシリアル化および逆シリアル化操作で使用されているタイプ(クラス、構造体、または列挙型)にDataContractAttribute属性を適用します。

また、シリアル化する値を保持するフィールド、プロパティ、またはイベントにDataMemberAttributeを適用する必要があります。 DataContractAttributeを適用すると、DataContractSerializerを明示的に有効にしてデータをシリアル化および逆シリアル化できます。

最近のバージョンのasp.net-web-apiでは、JSONのシリアル化にJson.NETを使用していますが、Json.NET respects data contract attributesです。

[DataMember]でプロパティをマークするか、opt-out serialization modelに切り替えてください。

関連する問題