jsonファイルを読み込み、このデータをGET経由で提供する簡単なAPIを作成しました。コントローラのための私のモデルは次のようになります。GML用の不正なJson
[
{
"Name": "testing",
"IP": "127.0.0.1"
}
]
そして:私は、元のJSONファイルは、次のようになりますJSON出力
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
を取得するにはWebApiConfig.cs
にこの行を追加
public static class ServerListHandler
{
private static readonly string _serverListPath;
private static FileSystemWatcher _serverListWatcher;
private static string _servers;
public static string Servers
{
get
{
if(_serverListWatcher == null && File.Exists(_serverListPath))
{
InitializeFileWatcher();
ReadData();
}
return _servers;
}
private set
{
_servers = value;
}
}
static ServerListHandler()
{
_serverListPath = Properties.Settings.Default.ServerListPath;
if(!File.Exists(_serverListPath))
{
Debug.WriteLine("Could not find config with path: " + _serverListPath);
}
else
{
ReadData();
InitializeFileWatcher();
}
}
private static void InitializeFileWatcher()
{
_serverListWatcher = new FileSystemWatcher(Path.GetDirectoryName(_serverListPath));
_serverListWatcher.EnableRaisingEvents = true;
_serverListWatcher.Deleted += OnServerListChanged;
_serverListWatcher.Changed += OnServerListChanged;
_serverListWatcher.Created += OnServerListChanged;
_serverListWatcher.Renamed += OnServerListChanged;
}
private static void OnServerListChanged(object sender, FileSystemEventArgs e)
{
ReadData();
}
private static void ReadData()
{
try
{
string content = File.ReadAllText(_serverListPath);
Servers = content;
}
catch(Exception ex)
{
Debug.WriteLine("Could not read server file: " + ex);
}
}
}
GETの結果は次のとおりです。
"[\r\n {\r\n \"Name\": \"testing\",\r\n \"IP\": \"127.0.0.1\"\r\n }\r\n]\r\n"
もちろん、結果はJson.NETでは解析できません。 私の質問は、jsonの文字列を手動で解析する必要があるかどうか、または適切なjson出力を有効にするために何かを有効/チェックするのを忘れた場合です。
編集
要求され、これが私のコントローラ
public class ServersController : ApiController
{
public HttpResponseMessage GetAllServers()
{
if(ServerListHandler.Servers == null)
return Request.CreateResponse(HttpStatusCode.NoContent);
return Request.CreateResponse(HttpStatusCode.OK, ServerListHandler.Servers);
}
}
どのようにJSONを見ていますか?デバッガでファイルに出力しますか? – CathalMF
また、実際にAPIから結果を返すコードも表示します。 – CathalMF
結果またはオリジナルを意味しますか?元のファイルはWebサービスディレクトリにあり、結果はWebブラウザから取得されます(またはWebアプリケーションをデバッグすることで取得できます。同じ出力です) – chris579