2013-06-24 35 views
3

我只生成一個JSON WepApi,並且我有一個返回列表的控制器。 我已經裝修清單,Datacontract /數據成員的屬性是這樣的:DataContract名稱屬性不與Json串行器一起工作

[DataContract(Name = "Files", Namespace = "http://schemas.example.com")] 
    public class FileDesc 
    { 
     [DataMember(Name = "MyFileName")] 
     public string Name { get; set; } 
     [DataMember(Name = "MyFilePath")] 
     public string Path { get; set; } 
     [DataMember(Name = "MyFileSize")] 
     public long? Size { get; set; } 
     public FileDesc(string n, string p, long? s) 
     { 
      Name = n; 
      Path = p; 
      Size = s; 
     } 
    } 

在我控制我返回列表如下:

// Response 
List<FileDesc> FileList = new List<FileDesc>(); 
foreach (MultipartFileData file in provider.FileData) 
{ 
    FileList.Add(new FileDesc(file.Headers.ContentDisposition.FileName, file.LocalFileName , file.Headers.ContentDisposition.Size)); 
} 
return FileList; 

但在JSON輸出列表中的名稱屬性丟失:

[ 
    { 
    "myFileName": "\"ArduinoUNO.png\"", 
    "myFilePath": "c:\\images\\ArduinoUNO.png", 
    "myFileSize": null 
    } 
] 

要強制只JSON輸出我已經刪除了XML格式上的Global.asax:

//Only JSON 
var formatters = GlobalConfiguration.Configuration.Formatters; 
formatters.Remove(formatters.XmlFormatter); 

在此先感謝

回答

5

陣列不JSON本身有名字。如果你想在列表上有一個名字,你需要一個具有一個命名屬性的外部對象來保存列表。

事情是這樣的:那麼

public class Response 
{ 
    [DataMember(Name = "Files")] 
    List<FileDesc> FileList { get; set; } 
} 

的JSON應該是這樣的:

{ 
    "Files": 
    [ 
     { 
      "myFileName": "\"ArduinoUNO.png\"", 
      "myFilePath": "c:\\images\\ArduinoUNO.png", 
      "myFileSize": null 
     } 
    ] 
} 
+0

感謝你,是我一直在尋找。我剛開始使用JSON。 –