4

次のJavaScriptオブジェクトリテラルをC#コードで文字列として作成する必要があり、これを行うための最良の方法に関するヒントを探しています。

model: {
    id: "Id",
    fields: {
        Surname: { type: "string", validation: { required: true } },
        FirstName: { type: "string", validation: { required: true } },
        PrivateEmail: { type: "string", validation: { required: true } },
        DefaultPhone: { type: "string" },
        CompanyName: { type: "string" },
        CreateDate: { type: "date" },
        LastLoginDate: { type: "date" },
        IsLockedOut: { type: "boolean" }
    }
}

これは、MVC4ビューモデルの各行がどのように見えるかを反映するモデルプロパティを持つクライアント側オブジェクトを定義します。プレーンリフレクションを使用して文字列リテラルを生成できますが、.NETですでに利用可能なJSONシリアル化サービスを何らかの方法で利用したいと思います。そのためには、上記のJSプロパティに対応するプロパティを持つ匿名オブジェクトを作成する必要があると思います。どうすればこれを行うことができますか?

編集: ビューモデルクラスのプロパティをループして、上記と同様のビューモデルクラスのJavaScriptの「変換」にシリアル化するC#オブジェクトを生成する必要があります。

4

1 に答える 1

5

彼が求めているのは、C#オブジェクトをJSON文字列に変換することだと思います。

これを試して:

http://msdn.microsoft.com/en-us/library/system.json.jsonobject%28v=vs.95%29.aspx

また

http://james.newtonking.com/pages/json-net.aspx

編集(使用方法の例):

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

編集:

これは@yyamilからのコメントです:

jsonオブジェクトをシリアル化するためだけに新しいクラスを作成したくない場合は、匿名オブジェクトを使用することもできます。

var notificationPayload = new
{
    notification = new
    {
        title = "Title", 
        body = "body"
    }
};

string json = JsonConvert.SerializeObject(notificationPayload);
于 2012-04-24T08:00:49.637 に答える