Вам нужно расширение% n $ s, которое является общим для большинства систем Unix.
"Hi %1$s, you are %2$s."
См. Немецкий пример внизу. printf
. Относительно DaveF
.
Хорошо, у меня есть решение, я вручную добавил __ type в коллекцию в классе JavaScriptConverter .
public class ProductConverter : JavaScriptConverter
{ public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
Product p = obj as Product;
if (p == null)
{
throw new InvalidOperationException("object must be of the Product type");
}
IDictionary<string, object> json = new Dictionary<string, object>();
json.Add("__type", "Product");
json.Add("Id", p.Id);
json.Add("Name", p.Name);
json.Add("Price", p.Price);
return json;
}
}
Есть ли какие-нибудь "официальный" способ сделать это? :)
При создании JavaScriptSerializer передайте ему экземпляр SimpleTypeResolver.
new JavaScriptSerializer(new SimpleTypeResolver())
Нет необходимости создавать собственный JavaScriptConverter.
Основываясь на ответе Джошуа, вам необходимо реализовать SimpleTypeResolver
Вот «официальный» способ, который сработал для меня.
1) Создайте этот класс
using System;
using System.Web;
using System.Web.Compilation;
using System.Web.Script.Serialization;
namespace XYZ.Util
{
/// <summary>
/// as __type is missing ,we need to add this
/// </summary>
public class ManualResolver : SimpleTypeResolver
{
public ManualResolver() { }
public override Type ResolveType(string id)
{
return System.Web.Compilation.BuildManager.GetType(id, false);
}
}
}
2) Используйте его для сериализации
var s = new System.Web.Script.Serialization.JavaScriptSerializer(new XYZ.Util.ManualResolver());
string resultJs = s.Serialize(result);
lblJs.Text = string.Format("<script>var resultObj = {0};</script>", resultJs);
3) Используйте его для десериализации
System.Web.Script.Serialization.JavaScriptSerializer(new XYZ.Util.ManualResolver());
var result = json.Deserialize<ShoppingCartItem[]>(jsonItemArray);
Полный текст здесь: http://www.agilechai.com/content/serialize- and-deserialize-to-json-from-asp-net /