我希望使用json.net将枚举反序列化为其字符串表示形式,反之亦然.我可以想出告诉框架应用它的唯一方法StringEnumConverter是注释有问题的属性,如下所示:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,在我的用例中,全局配置json.net会更方便,所有枚举都使用它进行序列化StringEnumConverter,而不需要额外的注释.
有没有办法这样做,例如在自定义的帮助下JsonSerializerSettings?
鉴于以下课程,
public class Result
{
public bool Success { get; set; }
public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在这样的Controller动作中返回其中一个,
return Json(new Result() { Success = true, Message = "test"})
Run Code Online (Sandbox Code Playgroud)
但是,我的客户端框架期望这些属性是小写的成功和消息.没有实际上必须有小写的属性名称是一种方法来实现这个思想正常的Json函数调用?
这是我第一次曾经使用JSON,甚至System.Net和WebRequest部分在我的任何应用程序.我的应用程序应该发送一个JSON有效负载,类似于下面的一个到身份验证服务器:
{
"agent": {
"name": "Agent Name",
"version": 1
},
"username": "Username",
"password": "User Password",
"token": "xxxxxx"
}
Run Code Online (Sandbox Code Playgroud)
为了创建这个有效载荷,我使用了JSON.NET库.我如何将此数据发送到身份验证服务器并接收其JSON响应?以下是我在一些示例中看到的内容,但没有JSON内容:
var http = (HttpWebRequest)WebRequest.Create(new Uri(baseUrl));
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";
string parsedContent = "Parsed JSON Content needs to go here";
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] bytes = encoding.GetBytes(parsedContent);
Stream newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var …Run Code Online (Sandbox Code Playgroud) 我正在使用json.net(Newtonsoft的JsonSerializer).我需要自定义序列化以满足以下要求:
例如:
var product = new Product();
procuct.Name = "Product1";
product.Items = new Dictionary<string, Item>();
product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
Run Code Online (Sandbox Code Playgroud)
必须序列化为:
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意属性Name序列化为"name",但键Item1序列化为"Item1";
我试图创建CustomJsonWriter来序列化属性名称,但它也改变了dicionary键.
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer) : base(writer)
{
}
public override void WritePropertyName(string name, bool escape)
{
if (name != "$type")
{
name = name.ToCamelCase();
}
base.WritePropertyName(name, escape);
}
}
Run Code Online (Sandbox Code Playgroud) 在.NET世界中,当谈到对象序列化时,它通常用于在运行时检查对象的字段和属性.对此作业使用反射通常很慢,并且在处理大量对象时是不合需要的.另一种方法是使用IL发射或构建表达树,这些表现树相对于反射提供显着的性能增益.而后者是处理序列化时最现代化的库.但是,在运行时构建和发送IL需要花费时间,并且只有在将此信息缓存并重用于相同类型的对象时才会回收投资.
当使用Json.NET时,我不清楚使用上述哪种方法,如果确实使用了后者,是否使用了缓存.
例如,当我这样做时:
JsonConvert.SerializeObject(new Foo { value = 1 });
Run Code Online (Sandbox Code Playgroud)
Json.NET是否构建了Foo的成员访问信息并缓存以便以后重用它?
使用SelectToken方法 JSON.NET的选择与令牌JSONPath,我发现没有办法specifiy,搜索应该是不区分大小写。
例如
json.SelectToken("$.maxAppVersion")
Run Code Online (Sandbox Code Playgroud)
无论是否已写入令牌或任何其他大小写形式maxappversion,都应返回匹配的令牌MAXAPPVERSION。
我的问题:
是否存在不区分大小写的方式使用JSONPath的正式方法或至少是变通方法?
(我找到的最接近的是针对JSON的Java实现的类似问题)
我正在使用JSONPEncoderFactory,JSONPBehavior解决方案在WCF中启用JSONP.这一切都很好,所有设置和运行良好,我的服务正确返回数据,没有问题.
但是,由于它们在JS中的使用方式,我需要能够将JSON变量名强制为小写,这是我迄今尚未弄清楚的.
以下是我的服务输出示例(此示例中的变量名称和值已更改为良性元素)
{"Animals":["dog","cat","mouse"],"Owner":"Greg","Permanent":"y","ID":1,"DaysToStay":"1"}
Run Code Online (Sandbox Code Playgroud)
很简单吧?我希望"动物"成为"动物",依此类推......
我是否需要使用json解析器,或者仅仅使用正则表达式是否容易?如果有人能让我知道他们之前是怎么做的,我将不胜感激.
谢谢!
我的MVC视图中有以下内容:
$(document).ready(ko.applyBindings(new ProfileVm(@Html.Raw(Json.Encode(Model)))));
Run Code Online (Sandbox Code Playgroud)
这很好用,除了所有的键Model都用大写的第一个字母编码.如何从视图中调用camelCase解析器?或者有没有办法告诉Json.Encode使用小写分辨率?