ASMXWebサービスからJSONにシリアル化されたLINQ結果を返そうとしています。私の知る限り、これはうまくいくはずなので、何かが足りないに違いありません。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetCitiesForAffiliate(string aff)
{
XDocument centerXml = XDocument.Load(HttpContext.Current.Server.MapPath("~/App_Data/Centers.xml"));
var query = (from center in centerXml.Descendants("Center")
where center.Element("ServiceArea").Value == aff
orderby center.Element("City") ascending
select new {
City = center.Element("City")
}).Distinct();
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(query);
return json;
}
serializer.Serialize(query)行がArgumentExceptionをスローします。At least one object must implement IComparable.
おそらく問題は、匿名オブジェクトを選択していたのに、オブジェクトを入力しても実行されなかったことだと思いました。私はただ愚かな何かを逃していると確信していますか?
興味深いことに、この以前のバージョンは正常に機能しました。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetCitiesForAffiliate(string aff)
{
TextFileReader reader1 = new TextFileReader(HttpContext.Current.Server.MapPath("~/App_Data/Centers.csv"), ",");
var query = (from cols in reader1
where cols[3].Equals(aff)
orderby cols[2] ascending
select new { City = cols[2] }).Distinct();
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(query);
return json;
}
TextFileReaderオブジェクトは、このCodeProjectプロジェクトからのものです。