jQuery.Gantthttp://mbielanczuk.com/jquery-gantt/のユーザーとなるWebサービスをaspで作成しようとしています。
このプラグインでサポートされている形式は次のようになります。
[{ "name" : "Task#1"
, "desc" : " Task Desc"
, "values": [
{ "from" : "/Date(1296547200000)/"
, "to" : "/Date(1296554400000)/"
, "desc" : "<b>Task #1<br>"
, "customClass": "ganttRed" (optional)
, "label" : "Task #1" (optional)
},
{ "from" : "/Date(1296637200000)/"
, "to" : "/Date(1296649800000)/"
, "desc": "<b>Task #</b>"
, "customClass": "ganttOrange" (optional)
, "label": "Task #1" (optional)
}
]
},
...
]
JSON.NETを使用して次のようなWebサービスを作成しました。
[JsonObject(MemberSerialization.OptIn)]
public class Meeting
{
[JsonProperty]
public string name { get; set; }
[JsonProperty]
public string desc { get; set; }
[JsonProperty]
public List<Value> values { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class Value
{
[JsonProperty]
public string id { get; set; }
[JsonProperty]
public DateTime from { get; set; }
[JsonProperty]
public DateTime to { get; set; }
[JsonProperty]
public string desc { get; set; }
[JsonProperty]
public string customClass { get; set; }
}
[WebMethod(Description = "simple test")]
public string JSON_Test()
{
Meeting m1 = new Meeting { name = "one",
desc = "ole",
values = new List<Value> {
new Value { customClass = "1", desc = "no desc", from = new DateTime(2011, 12, 29, 0, 0, 0, DateTimeKind.Utc), to = new DateTime(2011, 12, 29, 0, 0, 0, DateTimeKind.Utc), id = "3" },
new Value { customClass = "2", desc = "no desc1", from = new DateTime(2011, 12, 19, 0, 0, 0, DateTimeKind.Utc), to = new DateTime(2011, 12, 20, 0, 0, 0, DateTimeKind.Utc), id = "4" }
}
};
Meeting m2 = new Meeting
{
name = "second",
desc = "desc",
values = new List<Value> {
new Value { customClass = "1", desc = "no desc", from = new DateTime(2011, 11, 29, 0, 0, 0, DateTimeKind.Utc), to = new DateTime(2011, 12, 29, 0, 0, 0, DateTimeKind.Utc), id = "3" },
new Value { customClass = "2", desc = "no desc1", from = new DateTime(2011, 11, 19, 0, 0, 0, DateTimeKind.Utc), to = new DateTime(2011, 12, 20, 0, 0, 0, DateTimeKind.Utc), id = "4" }
}
};
List<Meeting> meetings = new List<Meeting>();
meetings.Add(m1);
meetings.Add(m2);
JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
return JsonConvert.SerializeObject(meetings, microsoftDateFormatSettings);
}
私が今持っているものは次のようになります(firebugの出力):
{"d":"[{\"name\":\"one\",\"desc\":\"ole\",\"values\":[{\"id\":\"3\",\"from\":\"\\/Date(1325116800000)\\/\",\"to\":\"\\/Date(1325116800000)\\/\",\"desc\":\"no desc\",\"customClass\":\"1\"},{\"id\":\"4\",\"from\":\"\\/Date(1324252800000)\\/\",\"to\":\"\\/Date(1324339200000)\\/\",\"desc\":\"no desc1\",\"customClass\":\"2\"}]},{\"name\":\"second\",\"desc\":\"desc\",\"values\":[{\"id\":\"3\",\"from\":\"\\/Date(1322524800000)\\/\",\"to\":\"\\/Date(1325116800000)\\/\",\"desc\":\"no desc\",\"customClass\":\"1\"},{\"id\":\"4\",\"from\":\"\\/Date(1321660800000)\\/\",\"to\":\"\\/Date(1324339200000)\\/\",\"desc\":\"no desc1\",\"customClass\":\"2\"}]}]"}
これは、手作業で変更された作業例です。
[{ "desc": "ole",
"name": "one",
"values": [{ "customClass": "1",
"desc": "no desc",
"from": "/Date(1325116800000)/",
"id": "3",
"to": "/Date(1325116800000)/"
},
{ "customClass": "2",
"desc": "no desc1",
"from": "/Date(1324252800000)/",
"id": "4",
"to": "/Date(1324339200000)/"
}
]
}]
何らかの理由で、私のサービスは余分な{"d": "といくつかのスラッシュを追加しています。カスタムシリアライザーを構築しようとしてこれを理解しようとしていましたが、行き詰まりました。
最初の余分なdの問題を修正するには、 「スラッシュ」を使用しますか?ホイールの再発明を試みているのかもしれませんが、これは単純な設定です。
編集
これは、jsonデータを読み取るjQuery.Ganttプラグインのコードです。
var core = {
/**
* Create header
*/
create: function(element) {
/**
* Retrieve data
*/
if (typeof (settings.source) == 'object') {
element.data = settings.source;
core.init(element);
} else {
$.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/json; charset=utf-8" });
$.getJSON(settings.source, function(jsData) {
element.data = jsData;
core.init(element);
});
}
},
dで正しく動作するように変更するにはどうすればよいですか?
EDIT2
このように機能しました:
create:function(element){/***データを取得します*/if(typeof(settings.source)=='object'){
if (settings.source.hasOwnProperty("d"))
element.data = settings.source.d;
else
element.data = settings.source;
core.init(element);
} else {
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
$.getJSON(settings.source, function(jsData) {
if (jsData.hasOwnProperty("d"))
element.data = jsData.d;
else
element.data = jsData;
core.init(element);
});
}
}
しかし、どういうわけか私のWebサービスはxmlを返しています。私は追加しました:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
しかし、firebugを見ると、これがわかります。
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMeeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.site.pl/">
<Meeting>
<name>one</name>
<desc>ole</desc>
<values>
<Value>
<id>3</id>
<from>2011-12-29T00:00:00Z</from>
<to>2011-12-29T00:00:00Z</to>
<desc>no desc</desc>
<customClass>1</customClass>
</Value>
<Value>
<id>4</id>
<from>2011-12-19T00:00:00Z</from>
<to>2011-12-20T00:00:00Z</to>
<desc>no desc1</desc>
<customClass>2</customClass>
</Value>
</values>
</Meeting>
<Meeting>
<name>second</name>
<desc>desc</desc>
<values>
<Value>
<id>3</id>
<from>2011-11-29T00:00:00Z</from>
<to>2011-12-29T00:00:00Z</to>
<desc>no desc</desc>
<customClass>1</customClass>
</Value>
<Value>
<id>4</id>
<from>2011-11-19T00:00:00Z</from>
<to>2011-11-20T00:00:00Z</to>
<desc>no desc1</desc>
<customClass>2</customClass>
</Value>
</values>
</Meeting>
</ArrayOfMeeting>