1

JavaScriptSerializer を使用して、ChatLogPath のように識別される、オブジェクトのリストと文字列の両方を含む JSON データのパッケージを送信したいと考えています。私が知る限り、そのクラスは 1 つのオブジェクト (リスト) のみをシリアル化できます。複数のオブジェクトを追加しようとすると、{...}{...} のような無効な JSON が作成されるだけで、仕事。

これを行う方法はありますか?私は C# と ASP.NET MVC に非常に慣れていないので、これがばかげた質問であれば許してください :)

編集:これが今の私のコードです。

    string chatLogPath = "path_to_a_text_file.txt";
    IEnumerable<ChatMessage> q = ...
    ...
    JavaScriptSerializer json = new JavaScriptSerializer();
    return json.Serialize(q) + json.Serialize(chatLogPath);

JSON { ... } に続く chatLogPath { ... } のような配列を出力します。つまり、無効な JSON であるため機能しません。

4

1 に答える 1

5

配列とパスを組み合わせて単一の JSON オブジェクトを取得する最も簡単な方法は、それぞれをプロパティ/フィールドとして持つクラスまたは動的オブジェクトを作成することです。

クラスの例:

public class ChatInformation {
  public IEnumerable<ChatMessage> messages;
  public string chatLogPath;
}
...
var output = new ChatInformation {
  messages = ...,
  chatLogPath = "path_to_a_text_file.txt"
};
return json.Serialize(output);

動的な例 (.NET 4+ が必要):

dynamic output = new ExpandoObject {
  messages = ...,
  chatLogPath = "path_to_a_text_file.txt"
};
return json.Serialize(output);

匿名型の例 (別のクラスを使用する必要がなく、.NET 4 を使用していない場合):

var output = new {
  messages = ...,
  chatLogPath = "path_to_a_text_file.txt"
};
return json.Serialize(output);
于 2012-12-30T07:18:28.913 に答える