可选择根据运行时的值来序列化一个属性
从根本上讲,我想根据序列化时的价值包括或省略生成的JSON的属性. 更具体地说,我有一种类型,知道是否已分配了一个值,如果有已分配了某些东西,我只想序列化该类型的属性(所以我需要在运行时检查值).我正在尝试使我的API轻松检测"具有默认值"和"根本没有指定"之间的区别. 自定义的jsonconverter似乎不够;我尝试过它,我相信属性名称已经在调用转换器之前序列化.就我而言,我想省略属性名称. 我正在考虑扩展默认contractresolver,但是createProperty和createProperties(返回jsonproperty serialization metadata)仅采用被序列化的类型,因此我无法检查实例本身.通常,我在DefaultContractresolver上看不到任何内容,允许我控制 实例已序列化;也许我错过了. 我还认为也许我需要创建一个违规器,该违反器返回了我的类型的自定义Jonobject Contract.但是,同样,我在
0 2024-04-17
编程技术问答社区
MSBuild正在用旧版本的Newtonsoft.Json.dll来替换。
我正在使用TeamCity中的MSBUILD跑步者来构建ASP.NET Web API和运行单元测试.一切都在起作用,直到我升级到" Microsoft Build Tools 2017 15.7.2". Suddenly msbuild was copying an older version of Newtonsoft.Json.dll (version 6.0.4.17603) from either "C:\Program Files (x86)\ISS\Microsoft Web Deploy V3" or "C:\Program Files\ISS \ Microsoft Web部署V3"在构建解决方案时,将V3"到输出文件夹中.所有项目都使用Nuget引用9.0.1版本. 在构建运行时监视输出文件夹,我可以看到.dll在6.0.4和9.0.1之间来回切换,直到构建结束,并且保留6.0.4版本. 我找到了这个问题当我将Web部署文件夹中的NewTonsoft
0 2024-04-17
编程技术问答社区
如何在Json.NET输出中添加注释?
有没有一种方法可以自动将注释添加到JSON.NET的串行输出? 理想情况下,我想这与以下内容相似: public class MyClass { [JsonComment("My documentation string")] public string MyString { get; set; } } 或(如果可以避免注释更好): public class MyClass { /// /// My documentation string /// public string MyString { get; set; } } tthat会产生: { // My documentation string "MyString": "Test" } 我问的原因是我们使用json.net序列化配置文件,该文件可以在以后手动更改.我想在我的C#配置类中包含文
0 2024-04-17
编程技术问答社区
如何告诉JSON.NET StringEnumConverter采取DisplayName?
我有以下模型: public enum Status { [Display(Name = "Awaiting Approval")] AwaitingApproval, Rejected, Accepted, } 我在这样的模型中使用此枚举: public class Docs { [Key] public int Id { get; set; } [JsonConverter(typeof(StringEnumConverter))] public Status Status { get; set; } } 现在可以正常工作;序列化器返回枚举等效的字符串.我的问题是如何告诉json.net取Display属性,而不是string? 解决方案 您应该尝试使用[EnumMember]而不是[Display].您也可以将[JsonConverter]属性
0 2024-04-17
编程技术问答社区
如何对Newtonsoft Jarray进行分类?
可以通过 col2 对 jarray 进行排序? [ { "col1": "thiscol", "col2": "thisval" }, { "col1": "thiscol2", "col2": "thisval2" }, { "col1": "thiscol3", "col2": "thisval3" } ] 如果将其转换为 array 是唯一的解决方案,那么我该怎么做? 解决方案 我认为您不能对jarray进行排序,但是您可以对内容进行排序并将结果加载到另一个Jarray中.这个适合您吗? string json = @" [ { ""col1"": ""foo"", ""col2"": ""bar"" }, { ""col1"": ""baz"
0 2024-04-17
编程技术问答社区
你能扩展JSON.NET中用于集合的默认JsonConverter吗?
我正在尝试为一个人子类别列表或集合的情况写一个自定义的jsonconverter,然后在子类中添加额外的属性(请参阅 在这里 ). JSON.NET的当前实现仅将列表更改为子对象的数组,而忽略了所有附加的属性.因此,我想编写一个新的jsonconverter,将对象像对待不是 ,而只是将其他所有内容序列化为正常人,但是在序列化中添加一个新属性,称为'_items'存储实际数据数组的位置. 现在,我已经编写了一个类,可以为我们的特定列表子类做到这一点,但是我必须手动指定所有属性.但是,如果我可以写一个将其视为普通对象的转换器,然后手动处理这些物品,我会变成金色.我什至不在乎我是否最终重复了另一堂课的一半(甚至更多!),但是我很想为这些情况做一个可重复使用的转换器.但是,正如我所说,我找不到默认转换器从. 开始. 所以...有人知道那在哪里? 解决方案 json.net中没有"默认转换器". 如果您能够检查 jSonserializerInternalterwri
0 2024-04-17
编程技术问答社区
比较两个JObjects或JArray
我有此WPF应用程序,该应用程序从REST Web服务中获取数据并返回JSON数据.然后,此数据将转换为XML.此XML文件稍后将转换回JSON,与REST Web服务的新JSON数据进行比较.我该怎么做? 这是我所做的示例: HTTPGet req = new HTTPGet(); req.Request("http://restservice//function"); string str= req.ResponseBody; StringBuilder xmlTemplate = new StringBuilder("{\"?xml\":{\"@version\": \"1.0\",\"@standalone\": \"no\"},\"root\":REPLACE }"); StringBuilder json = xmlTemplate.Replace(Constants.
0 2024-04-17
编程技术问答社区
如何在asp.net web api中返回json错误味精?
我想返回一个JSON ERRORMESSAGE,但目前在Fiddler中我无法在JSON面板中看到这一点: string error = "An error just happened"; JsonResult jsonResult = new JsonResult { Data = error, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data); 如何做? 解决方案 几点: 如果您要做的就是返回包含简单错误消息的错误响应,则Web API为此提供了CreateErrorResponse方法.因此,您可以简单地做: return Request.CreateErrorResponse(HttpStatusCode.BadRequ
0 2024-04-17
编程技术问答社区
将JSON反序列化为2个不同的模型
newtonsoft.json库有一种简单的方法,我可以自动将JSON逐个典范化为2个不同的型号/类? 例如,我得到JSON: [{ "guardian_id": "1453", "guardian_name": "Foo Bar", "patient_id": "938", "patient_name": "Foo Bar", }] ,我需要将其删除为以下模型: class Guardian { [JsonProperty(PropertyName = "guardian_id")] public int ID { get; set; } [JsonProperty(PropertyName = "guardian_name")] public int Name { get; set; } } class Patient { [JsonProperty(PropertyName = "patient_id")] p
0 2024-04-17
编程技术问答社区
在自定义JsonConverter'的ReadJson方法中处理空对象
我有一个newtonsoft json.net JsonConverter,可以帮助挑选一个类型为抽象类的属性.它的要旨看起来像这样: public class PetConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(Animal); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jsonObject = JObject.Load(reader); if (jsonObject["Lives"] != null) retu
0 2024-04-17
编程技术问答社区
如何将jarray对象添加到JObject中?
如何将JArray添加到JObject中?将jarrayObj更改为JObject. 时,我会例外 parameterNames = "Test1,Test2,Test3"; JArray jarrayObj = new JArray(); foreach (string parameterName in parameterNames) { jarrayObj.Add(parameterName); } JObject ObjDelParams = new JObject(); ObjDelParams["_delete"] = jarrayObj; JObject UpdateAccProfile = new JObject( ObjDelParams, new JProperty("birthday", txtBday),
0 2024-04-17
编程技术问答社区
运行JsonConverter的默认序列化逻辑
我有一个JsonConverter,根据实例特定标志,需要 运行自定义序列化逻辑 运行默认JSON.NET序列化逻辑 如何从JsonConverter? 运行默认的json.net序列化逻辑 谢谢 解决方案 这是一个示例.说出您的班级以这样的序列化: class Foo { public bool IsSpecial { get; set; } public string A { get; set; } public string B { get; set; } public string C { get; set; } } IsSpecial标志用于控制我们在转换器中做一些特别的事情还是让事情自然序列化.您可以像这样编写转换器: class FooConverter : JsonConverter { public override bool CanConvert(Type objectType)
0 2024-04-17
编程技术问答社区
将一个字符串数组转换为JArray
我有一个字符串的数组 var ids = new string[] { "1408576188", "1750854738", "100001058197465" }; 我想将此字符串数组作为JSON数组传递到API中.目前,API 无法接受以下返回的字符串: JsonConvert.SerializeObject(ids); 所以我弄清楚我能够通过将我的ids数组转入JArray对象来使用API​​. JArray.Parse(JsonConvert.SerializeObject(ids)); 如您所见,我在这里进行了两个操作,首先是序列化ids数组,然后将结果解析为JArray.有什么方法可以将我的ids数组直接转换为JArray对象? 解决方案 您是否尝试过FromObject方法: var array = JArray.FromObject(ids);
0 2024-04-17
编程技术问答社区
在JSON.NET中序列化/反序列化一个字节数组
我有一个简单的类,具有以下属性: [JsonObject(MemberSerialization.OptIn)] public class Person { ... [JsonProperty(PropertyName = "Photograph"] public byte[] Photograph { get; set; } ... } 但是,当我用图像填充照片属性并通过HTTP传输时,这是不起作用的. 这听起来像是一个简单的问题,但是我在网上查看几个小时后还没有找到解决方案,但是,我如何在json.net中序列化/questialise a Byte阵列?我需要什么属性标签,或者我应该以此方式执行此操作? 非常感谢! 解决方案 public static T Deserialize(byte[] data) where T : class { using (var stream = new MemoryStream(da
0 2024-04-17
编程技术问答社区
newtonsoft.json的jsonproperty属性在system.text.json中的等效是什么?
newtonsoft.json的JsonProperty属性在system.text.json? 中的等效属性是什么 示例: using Newtonsoft.Json; public class Example { [JsonProperty("test2")] public string Test { get; set; } } 参考: 使用newtonsoft.json attributes 解决方案 该属性命名为JsonPropertyName,来自System.Text.Json软件包中的System.Text.Json.Serialization.该功能在.NET 3.1或更高版本中本地可用. 示例: using System.Text.Json.Serialization; public class Example { [JsonPropertyName("test2")] public strin
0 2024-04-17
编程技术问答社区
将JToken内容反序列化为一个对象
我想将jtoken的内容供应到对象(User).我该怎么做? 这是我的JSON字符串: string json = @"[{""UserId"":0,""Username"":""jj.stranger"",""FirstName"":""JJ"",""LastName"":""stranger""}]"; 将其发送到API参数为JToken. 用户类: public class user { public int UserId {get; set;} public string Username {get; set;} public string FirstName {get; set;} public string LastName {get; set;} } Web API方法: public IHttpActionResult Post([FromBody]JToken users) { UserM
0 2024-04-17
编程技术问答社区
JObject如何读取数组中的值?
这是JSON字符串: {"d":[{"numberOfRowsAdded":"26723"}]} string json = DAO.getUploadDataSummary(); JObject uploadData = JObject.Parse(json); string array = (string)uploadData.SelectToken("d"); 如何更改代码以读取'numberOfrowsadddd的值? 解决方案 JObject uploadData = JObject.Parse(json); int rowsAdded = Convert.ToInt32((string)uploadData["d"][0]["numberOfRowsAdded"]) 其他解决方案 您需要投射到JArray: string json = "{\"d\":[{\"numberOfRowsAdded\":\"26723\"}]}"; JObjec
0 2024-04-17
编程技术问答社区
JSon.NET反序列化子项目
对于避难所化,我通常使用具有与JSON和JsonConvert.DeserializeObject(jsonstring)中相同属性名称的对象. 但是现在我遇到了这个: { "id": 0815, "name": "whatever" "addedInfo": { "thisisinteresting": 4711, "id_str": "2336" } } 在 class Des { int id; string name; int thisisinteresting; } 解决方案 微不足道的方法是将您的类实际建模到JSON结构: public class AddedInfo { public int thisisinteresting { get; set; } public string id_str { get; set; } } public clas
0 2024-04-17
编程技术问答社区
不允许加载本地资源。
我想流式传输在线视频.但是我面临的j查询错误不允许加载本地资源: ...我找到了很多解决方案,但所有这些都不适合我. 这是我的代码... 控制器== >>> public ActionResult PlayVideo(string VidPath) { ViewData["VidPath"] = VidPath; return View(); } view == >>> 解决方案 我也有同样的问题.每当我使用Server.MapPath或Path.GetFullPath或只是硬编码的"〜/content/images/images.jpg"时,我总是会遇到相同的错
0 2024-04-17
编程技术问答社区
在Newtonsoft JSON.Net中,我如何将两个JObjects的两个数组结合起来?
我有两个类似的JSON对象. 在每个对象中,都有一个带有其他对象数组的属性,例如: doc1 { "Title": "Alpha", "data": [ { "Id": "Fox2", "Field": "King6", "Value": "Alpha", "Description": "Tango" } ] } doc2 { "Title": "Bravo", "data": [ { "Id": "Kilo", "Field": "Echo", "Value": "Romeo", "Description": "Jester" } ] } 我有两个对象,并且正在尝试将数据字段从一个对象添加到另一个对象 - 基本上是将一个"数据"属性数组的数据添加到另一个属性中. 最终结果应该是这样: { "T
0 2024-04-17
编程技术问答社区