2012-04-24 2 views
4

Мне нужно создать следующий литерал объекта JavaScript в коде C#, как строку, и я ищу несколько советов о том, как лучше всего это сделать.Как создать литерал объекта 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 будет выглядеть. Я могу использовать простое отражение для генерации строкового литерала, но я бы предпочел как-то использовать уже доступные сервисы сериализации JSON в .NET. Для этого я думаю, что мне нужно будет создать анонимный объект со свойствами, соответствующими указанным выше свойствам JS. Как я могу это сделать?

РЕДАКТИРОВАТЬ: мне нужно петлю над свойствами в классе вид модели и породил C# объект, который будет сериализовать к JavaScript «преобразования» класса вид модели, аналогичной приведенной выше.

+0

В случае, если полученный код выглядеть так, или это динамично? Разве вы не можете просто вставить его в строку? – Guffa

+0

@Guffa Я хочу поместить код в строчную строку; Я просто не хочу качать собственный сериализатор, используя только icky string concat. – ProfK

+0

Хорошо, я дал вам решение для буквальной строки. Если вы этого не хотите, что вам нужно? – Guffa

ответ

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

EDIT (пример того, как использовать):

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); 

EDIT:

Это комментарий от @yyamil:

Вы также можете использовать анонимные объекты в случае, если вы не хотите, чтобы создать новый класс только для сериализации JSON объекта:

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

string json = JsonConvert.SerializeObject(notificationPayload); 
+0

Спасибо, Мэтью, я надеялся, что мой вопрос будет не таким тупым, как предложил @Guffa, но я также спрашиваю, как динамически получать эти свойства в объект C#, чтобы они правильно сериализовались. – ProfK

+0

@ProfK Проверьте мои изменения ... – Matthew

+0

Мне нужно создать динамический объект с одним свойством Field для каждого свойства, например. в продукте. В этой части мой вопрос не дает достаточно ясного ответа, но вы ответили на правильную часть. – ProfK

Смежные вопросы