Ich versuche, einen OpenSearch-Vorschlagsdienst zu schreiben, der der OpenSearch-Spezifikation entspricht.Serialisierung von Array mit Objekten zu JSON in WCF zur Einhaltung von OpenSearch
http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions
Diese spec erfordert den Dienst eine JSON Array mit dem ersten Element zurückzubringen Arrays von Strings eine Zeichenfolge und die folgenden Elemente sein wird. Ich bin in der Lage, es fast dorthin zu bringen, indem ich ein Array von Strings (string [] []) zurückschicke und WCF dies in JSON serialisieren lasse. Um der Spezifikation zu entsprechen, habe ich jedoch versucht, ein Array von Objekten (object []) zurückzugeben, wobei das erste ein String ist und der Rest Arrays aus Strings (string []) sind.
Jedes Mal, wenn ich versuche, das Array von Objekten zurück, funktioniert es nicht, wie diese:
Von Service:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SuggestionService : ISuggestionService
{
public object[] Search(string searchTerms)
{
SearchSuggestions = new object[4];
SearchText = searchTerms;
SearchSuggestions[0] = SearchText;
Text = new string[10];
Urls = new string[10];
Descriptions = new string[10];
// Removed irrelevant ADO.NET code
while (searchResultReader.Read() && index < 10)
{
Text[index] = searchResultReader["Company"].ToString();
Descriptions[index] = searchResultReader["Company"].ToString();
Urls[index] = "http://dev.localhost/Customers/EditCustomer.aspx?id=" +
searchResultReader["idCustomer"];
index++;
}
SearchSuggestions[1] = Text;
SearchSuggestions[2] = Descriptions;
SearchSuggestions[3] = Urls;
return SearchSuggestions;
}
[DataMember]
public string SearchText { get; set; }
[DataMember]
public string[] Text { get; set; }
[DataMember]
public string[] Descriptions { get; set; }
[DataMember]
public string[] Urls { get; set; }
[DataMember]
public object[] SearchSuggestions { get; set; }
}
Hier ist die gesamte Oberfläche:
[ServiceContract]
public interface ISuggestionService
{
[OperationContract]
[WebGet(UriTemplate = "/Search?q={searchTerms}",
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Json)]
object[] Search(string searchTerms);
}
Das verursacht, den Dienst zurückzugeben "Error 324 (net :: ERR_EMPTY_RESPONSE): unbekannter Fehler." Dies ist der einzige Fehler, den ich bekommen konnte.
Kann ich nicht ein Array von Objekten verwenden, um eine Zeichenfolge und drei Arrays zu speichern? Was kann ich noch tun, um WCF zu verwenden, um den richtigen JSON zurückzugeben, der dieser Spezifikation entspricht?
EDIT: Hinzugefügt viel mehr des Codes
Danke für die Antwort, ich habe den gesamten relevanten Code hinzugefügt. –
Dies ist, was ich ursprünglich versuchte, das Problem ist, dass es die Namen der Objekte in der JSON zurückgibt, die außerhalb der Spezifikation ist. Es muss so etwas zurückgeben (Aus Referenz): ["sea", ["sears", "suchmaschinen", "search engine", "search", "sears.com", "seattle mal"], ["7.390.000 Ergebnisse", "17.900.000 Ergebnisse", "25.700.000 Ergebnisse", "1.220.000.000 Ergebnisse", "1 Ergebnis", "17.600.000 Ergebnisse"], ["http://example.com?q=sears", "http: //beispiel.de?q = search + engines ", http://example.com?q=search+engine", http://example.com?q=search "," http://example.com?q=sears. com "," http://example.com?q=seattle+times "]] –
Ich kann ein gezacktes Array von Strings (string [] []) zurückgeben und es ist fast da, das Problem ist, dass das erste Element des JSON-Array ist umgeben von Klammern, was außerhalb der Spezifikation liegt, weshalb ich versucht habe, ein Array von Objekten (Objekt []) zurückzugeben. " –