Tag: 反序列化

JSON到C# – 在json中列出没有子字段名称的字段?

使用Json.net(Newtonsoft.json),我如何定义一个C#类(或类)来处理下面的json? “数据”字段似乎是级别/描述子字段的列表,但请注意它们之前没有字段名称。 “错误”字段似乎是错误编号/错误消息子字段的列表,但请注意,它们也不以字段名称开头。 { “status”: “error”, “data”: [ { “warning” : “your input was wrong” } ], “error”: [ { “373”: “Error description goes here” } ] } 此类定义不会生成解析错误; 但是数据和错误的内容不正确。 public class ApiResponse { [JsonProperty(PropertyName = “status”)] public string Status; [JsonProperty(PropertyName = “data”)] public IEnumerable<KeyValuePair> Data; [JsonProperty(PropertyName = “error”)] public IEnumerable<KeyValuePair> Errors; }; // this […]

反序列化JSON不能使用JSON.NET

使用JSON.NET进行反序列化时,我遇到以下JSON问题。 { “?xml”: { “@version”: “1.0”, “@encoding”: “utf-8” }, “Persons”: { “Person”: [{ “@Id”: “1”, “@Name”: “John”, “@Surname”: “Smith” }, { “@Id”: “2”, “@Name”: “John”, “@Surname”: “Smith”, “Skills”: { “Skill”: [{ “@Id”: “1”, “@Name”: “Developer” }, { “@Id”: “2”, “@Name”: “Tester” }] } }] } } 我正在使用以下课程: public class RootObject { public Xml xml { […]

DefaultModelBinder无法反序列化作为JSON对象传递给操作的.NET Dictionary对象?

我有一个非常简单的课程: public class FilterItem { public Dictionary ItemsDictionary { get; set; } public FilterItem() { ItemsDictionary = new Dictionary(); } } 我想在客户端上填充字典中的数据,然后将其作为JSON对象传递给我的控制器操作。 但无论我在客户端上尝试什么,DefaultModelBinder似乎都无法反序列化它。 以下是调用我的操作的示例javascript代码: var simpleDictionary = {“ItemsDictionary”: {“1”: “5”, “2”: “7”}}; $.ajax({ cache: false, type: “POST”, data: JSON.stringify(simpleDictionary), contentType: “application/json; charset=utf-8”, url: “/Catalog7Spikes/GetFilteredProductsJson”, success: function (data) {…}); 这是我的动作方法的简化版本: [HttpPost] public ActionResult GetFilteredProductsJson(FilterItem filterItem) { […]

反序列化使得字段是空列表而不是空

如果我有这样的课程: [DataContract(Name = “”, Namespace = “”)] public class MyDataObject { [DataMember(Name = “NeverNull”)] public IList MyInts { get; set; } } 当下列字符串被反序列化时,有没有办法让MyInts字段成为非空的空列表? string serialized = @”{“”NeverNull””:null}”; MyDataObject myDataObject = JsonConvert.DeserializeObject(serialized); 我正在使用Newtonsoft.Json 我问的原因是我有一个相当复杂的json请求解析,它包含对象列表的嵌套,我想要反序列化代码来创建这些对象,所以我可以避免大量的空检查: if (foo.bar != null) { foreach (var bar in foo.bar) { if (bar.baz != null) { foreach (var baz in bar.baz) { […]

JSON.NET反序列化属性名称转换为具有自定义ContractResolver的ExpandoObject

我有这个JSON: {“firstName”: “John”,”lastName”: “Doe”} 这个JSON.NET合同解析器: public class CustomContractResolver : DefaultContractResolver{ protected override string ResolvePropertyName(string propertyName) { return propertyName.Replace(“_”,””); } } 我有这个WebApi Controller方法,使用expando来使用提供的字段部分更新db行: public virtual int Post(int id, JObject content) { var obj = JsonConvert.DeserializeObject(content.ToString(), new JsonSerializerSettings { ContractResolver = new CustomContractResolver() }); db.Update(id, obj) } 我希望反序列化的expando具有属性first_name和last_name以匹配我的模型/ db列名,但是它的属性仍然匹配JSON。 直接反序列化为Person有first_name和last_name有效,正如LB帮助我在下面发现的那样,但是我的db层需要一个Expando来进行部分记录更新,否则它会吹掉没有被json指定的Person任何属性,因此返回null在模型中。 我可以在ContractResolver中做什么来转换Expando的属性?

在C#中使用嵌套数组反序列化JSON

我在这里尝试反序列化这个JSON时遇到了麻烦: { “response”: { “numfound”: 1, “start”: 0, “docs”: [ { “enID”: “9999”, “startDate”: “2013-09-25”, “bName”: “XXX”, “pName”: “YYY”, “UName”: [ “ZZZ” ], “agent”: [ “BobVilla” ] } ] } } 我为此创建的类是: public class ResponseRoot { public Response response; } public class Response { public int numfound { get; set; } public int start { […]

反序列化时标记的字段会发生什么?

这些字段是否设置为默认值,例如创建新实例时? 我可以创建自定义代码以在反序列化时将这些字段设置为新值吗?

JavaScriptSerializer.Deserialize()到字典中

我试图在Json中解析Open Exchange Rates JSON ,我正在使用这种方法: HttpWebRequest webRequest = GetWebRequest(“http://openexchangerates.org/latest.json”); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); string jsonResponse = string.Empty; using (StreamReader sr = new StreamReader(response.GetResponseStream())) { jsonResponse = sr.ReadToEnd(); } var serializer = new JavaScriptSerializer(); CurrencyRateResponse rateResponse = serializer.Deserialize(jsonResponse); 如果我理解JavaScriptSerializer.Deserialize正确我需要定义和对象将Json转换为。 我可以使用这样的数据类型成功地序列化它: public class CurrencyRateResponse { public string disclaimer { get; set; } public string license { get; […]

使用Newtonsoft将JSON数组数组反序列化为List of Tuples

我从在线服务提供商处收到的数据如下: { name: “test data”, data: [ [ “2017-05-31”, 2388.33 ], [ “2017-04-30”, 2358.84 ], [ “2017-03-31”, 2366.82 ], [ “2017-02-28”, 2329.91 ] ], } 我想将它解析成一个看起来像这样的对象: public class TestData { public string Name; public List<Tuple> Data; } 我唯一能找到的是如何将一组对象解析成一个tulples列表,例如: Json.NET反序列化其他类型中的Tuple 不起作用? 有没有办法编写一个可以处理这个问题的自定义转换器?

基于.Net(C#)中的字段反序列化json

我正在编写一个应用程序来获取这样的Json对象列表: [ { “ObjectType”: “apple”, “ObjectSize”: 35, “ObjectCost”: 4, “ObjectTaste”: “good”, “ObjectColor”: “golden” }, { “ObjectType”: “books”, “ObjectSize”: 53, “ObjectCost”: 7, “Pages”: 100 }, { “ObjectType”: “melon”, “ObjectSize”: 35, “ObjectTaste”: “good”, “ObjectCost”: 5 }, { “ObjectType”: “apple”, “ObjectSize”: 29, “ObjectCost”: 8, “ObjectTaste”: “almost good”, “ObjectColor”: “red” } ] 我想创建一个基类ItemToSell (大小,成本),并从中派生Apple,Melon和Book,然后根据“ ObjectType ”字段进行反序列化,使其适合任何类。 我希望它构建一个ItemToSell对象列表,每个对象都是Apple,Melon或Book。 我怎么能在.Net中这样做? 提前致谢 […]