Tag: json.net

使用Json.NET序列化XNA矩形

我正在使用Json.NET首先看看这个: using System.Drawing; string json = JsonConvert.SerializeObject(new Rectangle(-3,6,32,32), Formatting.Indented); Console.WriteLine(json); Rectangle deserializedRectangle = JsonConvert.DeserializeObject(json); 一切都按预期工作。 控制台输出为:“3,6,32,32” 但是当我想用XNA Rectangle做同样的事情时,我得到一个错误。 (只是用“使用Microsoft.Xna.Framework;”替换了旧的使用方法;) 控制台输出为:“{X:-3 Y:6宽度:32高度:32}” 它抛出的错误是:“转换值”{X:-3 Y:6宽度:32高度:32}时出错“输入’Microsoft.Xna.Framework.Rectangle’。” 为什么会这样? 什么是错的,我该如何解决这个问题?

如何在JObject中添加或更新JProperty值

我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此操作(或至少是其中的一部分)。 如果Json.NET中没有任何内容,那么建议的过程是什么,或者我如何更改下面的代码以更接近推荐的过程。 public static partial class ExtensionMethods { public static JObject SetPropertyContent(this JObject source, string name, object content) { var prop = source.Property(name); if (prop == null) { prop = new JProperty(name, content); source.Add(prop); } else { prop.Value = JContainer.FromObject(content); } return source; } } 我可以确认上面的代码适用于基本用法,但我不确定它是否适用于更广泛的用法。 我有这个扩展返回一个JObject的原因是你可以链接调用(对这个扩展或其他方法和扩展的多次调用)。 即 var data = JObject.Parse(“{ ‘str1’: ‘test1’ }”); […]

使用JSON.NET反序列化值为字段名称的JSON

我有一个非常不受欢迎的情况,需要我反序列化JSON,其中值是使用JSON.NET的字段名称。 假设我有以下JSON,结构非常合理: { “name”: “tugberk”, “roles”: [ { “id”: “1”, “name”: “admin” }, { “id”: “2”, “name”: “guest” } ] } 使用JSON.NET将其反序列化为CLR对象非常容易: class Program { static void Main(string[] args) { var camelCaseSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; var text = File.ReadAllText(“user_normal.txt”); var obj = JsonConvert.DeserializeObject(text, camelCaseSettings); } } public class User […]

反序列化JSON对象的一部分并将其序列化,其余属性保持不变

我有一些JSON,我想反序列化为C#类的实例。 但是,该类没有与原始JSON匹配的所有字段/属性。 我希望能够修改类中的属性值,然后将其序列化回JSON,其中原始JSON中的其余字段和属性仍然完好无损。 例如,假设我有以下JSON: { “name”: “david”, “age”: 100, “sex”: “M”, “address”: “far far away” } 我想将它反序列化为这个类: class MyClass { public string name { get; set; } public int age { get; set; } } 反序列化后,我设置以下内容: myClass.name = “John”; myClass.age = 200; 现在,我想将它序列化回JSON并得到这个结果: { “name”: “John”, “age”: 200, “sex”: “M”, “address”: “far far away” } […]

使用JSON.NET将对象序列化为HttpClient的响应流

抽象 嗨,我正在开发一个项目,需要通过HttpClient发送一些对象的潜在巨大json,一个10-20 MB的JSON是一个典型的大小。 为了有效地执行此操作,我想使用流,使用Json.Net来序列化对象以及使用HttpClient发布数据的流。 问题 下面是使用Json.net进行序列化的代码片段,为了使用流,Json.net期望它将写入一个流: public static void Serialize( object value, Stream writeOnlyStream ) { StreamWriter writer = new StreamWriter(writeOnlyStream); <– Here Json.net expects the stream to be already created JsonTextWriter jsonWriter = new JsonTextWriter(writer); JsonSerializer ser = new JsonSerializer(); ser.Serialize(jsonWriter, value ); jsonWriter.Flush(); } 虽然HttpClient期望它将读取的流: using (var client = new HttpClient()) { client.BaseAddress […]

使用Newtonsoft自定义JSON字符串输出

我正在尝试使用Newtonsoft JsonConverter序列化C#DataTable 代码: JsonConvert.SerializeObject(dt); //dt is DataTable 我得到的结果是: [ { “Name”: “Tiger Nixon”, “Position”: “System Architect”, “Address”: “Edinburgh”, “No”: “5421” }, { “Name”: “Garrett Winters”, “Position”: “Accountant”, “Address”: “Tokyo”, “No”: “8422” } ] 我想要的结果是: { “data”: [ [ “Tiger Nixon”, “System Architect”, “Edinburgh”, “5421” ], [ “Garrett Winters”, “Accountant”, “Tokyo”, “8422” ] ] } 是否可以使用Newtonsoft自定义输出? […]

NewtonSoft JsonConverter – 访问其他属性

我需要将十进制的输出json格式化为一种货币,文化指定了我正在序列化的对象,该对象可以嵌套,因此我无法在序列化程序中预设选项。 我这样做的当前方式是使用格式化输出的额外字符串属性。 [JsonIgnore] public decimal Cost {get;set;} [JsonIgnore] public CultureInfo Culture {get;set;} public string AsCurrency(decimal value) { return string.Format(this.Culture, “{0:c}”, value); } [JsonProperty(“FormattedCost”)] public string FormatedCost { get { return this.AsCurrency(this.Cost); } } 我有很多属性要处理,我没有为反序列化烦恼,JsonObject被不同的语言用来填充PDF,所以我想要字符串值。 理想情况下,我想要一个JsonConverter所以我可以做到 [JsonProperty(“FormattedCost”)] [JsonConverter(typeof(MyCurrencyConverter))] public decimal Cost {get;set;} 我遇到的问题是如何访问转换器中包含对象的Culture属性。 public class MyCurrencyConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value, […]

如何将JSON.Net中的JObject转换为T.

我知道我可以使用JsonConvert.DeserializeObject(string) ,但是,我需要查看对象的_type (可能不是第一个参数)以确定要转换的特定类。 基本上,我想要做的是: //Generic JSON processor for an API Client. function MyBaseType ProcessJson(string jsonText) { var obj = JObject.Parse(jsonText); switch (obj.Property(“_type”).Value.ToString()) { case “sometype”: return obj.RootValue(); //NOTE: this doesn’t work… // return obj.Root.Value(); … } } … // my usage… var obj = ProcessJson(jsonText); var instance = obj as MyConcreteType; if (instance == null) […]

使用属性将枚举序列化为JSON.NET中的字符串

我想使用类似于[JsonIgnore]属性使用JSON.NET将枚举序列化为字符串 示例类: enum Gender { Male, Female } class ABC { public Gender { get; set; } } 如果我使用JSON.NET序列化它: var a = new ABC(); var str = JsonConvert.SerializeObject(a); str设置为{Gender:0} ,我更喜欢{Gender:Male} 。

将C#对象转为json字符串,如何处理双引号

我正在使用Newtonsoft.Json将对象解析为json字符串。 它会像这样返回一些思考: {\”code\”:-1,\”idName\”:\”empty\”,\”idValue\”:0,\”message\”:\”Failed,can not read object from body\”} 它不是一个有效的json字符串我认为,任何人都可以帮我工作? 我想要的是这样的: {“code”:-1,”idName”:”empty\”,\”idValue\”:0,\”message\”:\”Failed,can not read object from body\”} public static class CommonUtility { // format response string public static string FormatResponseString(int code, string idName, long idValue, string message) { ResponseString rs = new ResponseString(); rs.code = code; rs.idName = idName; rs.idValue = idValue; rs.message = message; string […]