Tag: json

如何告诉Json.NET忽略第三方对象中的属性?

Json.NET文档说您使用JsonIgnore来序列化类中的某些属性: public class Account { public string FullName { get; set; } public string EmailAddress { get; set; } [JsonIgnore] public string PasswordHash { get; set; } } 在使用JsonConvert.SerializeObject序列化第三方对象时,如何使Json.NET忽略特定属性?

覆盖自定义JSON.net合约解析程序中的属性值

我正在尝试实现一个自定义的JSON.net IContractResolver,它将用指定的字符串替换所有null属性值。 我知道这个function可以通过序列化类型成员的属性获得; 这是我们正在考虑的替代路线。 到目前为止我的解析器实现如下。 StringValueProvider是一个IValueProvider的简单实现,它不会影响问题,这是我无法弄清楚如何获取property的值,因为我不知道提供member的实例的这个方法所以我不能将它作为参数传递给GetValue() (在代码示例中标记为WHAT-GOES-HERE?)。 有没有办法可以从member或property获得我需要的东西? public class NullSubstitutionPropertyValueResolver : DefaultContractResolver { private readonly string _substitutionValue; public NullSubstitutionPropertyValueResolver(string substitutionValue) { _substitutionValue = substitutionValue; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { JsonProperty result = base.CreateProperty(member, memberSerialization); PropertyInfo property = member as PropertyInfo; if (property == null) { return result; } // What […]

Json.NET反序列化其他类型中的元组不起作用?

使用Json.net,反序列化包含Tuple的类型不起作用(序列化工作,但反序列化不起作用): [TestMethod] public void Test() { var orig = new TupleHolder(“what????”, true); var json = JsonConvert.SerializeObject(orig); Assert.AreEqual(“{\”Tup\”:{\”Item1\”:\”what????\”,\”Item2\”:true}}”, json); // great! serialization works like a charm! now let’s test deserialization: var dupl = JsonConvert.DeserializeObject(json); Assert.AreEqual(“ZZZ”, dupl.Tup.Item1); // pass! but it should be “what????”… what???? Assert.AreEqual(false, dupl.Tup.Item2); // pass! but it should be “true”, right??? Assert.AreEqual(orig.Tup.Item1, dupl.Tup.Item1); […]

在ASP.NET中使用Live Connect API检索用户的电子邮件地址

所以我是ASP.NET MVC和Windows Live Connect API的新手。 基本上我正在尝试将Live登录整合到我的网站中。 当用户登录时,Live会请求他们为我的应用程序提供某些信息的权限,将用户发送到我的应用程序设置中指定的重定向uri,并附加查询字符串。 在这里,如果用户第一次登录该站点,我希望他们的基本信息存储在我的服务器上(名字,姓氏,电子邮件)。 我已经能够获得他们的名字和姓氏,但我很难找到如何检索他们的主要电子邮件地址。 我会解释到目前为止我做了什么。 我找不到将Live connect集成到MVC应用程序的最佳方法,所以我做了最好的猜测。 我在我的重定向uri中指定了一个控制器动作,它使用查询字符串“code”来构造HTTP Post。 HttpRequest req = System.Web.HttpContext.Current.Request; string myAuthCode = req.QueryString[“code”]; string myAppId = ConfigurationManager.AppSettings.Get(“wll_appid”); string mySecret = ConfigurationManager.AppSettings.Get(“wll_secret”); string postData = “client_id=” + myAppId + “&redirect_uri=http%3A%2F%2Fmscontestplatformtest.com%2FContestPlatform%2FUser%2FSignIn&client_secret=” + mySecret + “&code=” + myAuthCode + “&grant_type=authorization_code”; byte[] byteArray = Encoding.UTF8.GetBytes(postData); WebRequest request = WebRequest.Create(“https://oauth.live.com/token”); request.ContentType […]

如何反序列化其中包含无效字段名称的JSON对象

我有一个JSON请求,其结构如下: “formats”: { “flash_embed”: “http://a3.vikiassets.com/assets/vikiplayer-922746a667cfd38137a7e45df6ba1b95.swf?auto_play=true&language_codes=en&media_id=74965&partner=16&source=api_v3”, “m3u8”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965/ios.m3u8”, “res-150p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_mp4cell_150.mp4”, “res-240p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_240p.mp4”, “res-270p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_270p.mp4”, “res-360p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_360p.mp4”, “res-480p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_480p.mp4”, “res-720p”: “http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_720p.mp4” } } 现在res-150p,在C#中说无效名称,如果我给它另一个名字,那么在去手化时我没有得到任何值,在res-150p内是null。 编辑: [Serializable] MoviesListRootObject是包含Response然后Response包含Formats的根对象 public class MoviesListRootObject { public int count { get; set; } public Pagination pagination { get; set; } public List response { get; set; } } [Serializable] public class Response […]

将JSON写入流而不缓冲内存中的字符串

我想通过显式构建文档来将JSON写入Stream 。 例如: var stream = …; var writer = new JsonWriter(stream); writer.BeginArray(); { writer.BeginObject(); { writer.String(“foo”); writer.Number(1); writer.String(“bar”); writer.Number(2.3); } writer.EndObject(); } writer.EndArray(); 这会产生: [ { “foo”: 1, “bar”: 2.3 } ] 这种方法的好处是不需要在内存中缓冲任何内容。 在我的情况下,我正在为流写入相当多的JSON。 像这样的解决方案涉及在内存中创建所有对象,然后将它们序列化为内存中的大字符串,然后最终将此字符串写入流和垃圾收集,可能来自LOH 。 我希望保持低内存使用率,在从另一个文件/ DB / etc流中读取数据时写出元素。 这种方法可以通过rapidjson库在C ++中使用。 为此,我搜索了一下,并没有找到解决方案。

如何在net-core 2.0中手动解析JSON字符串

我有一个具有以下结构的json字符串 { “resource”: “user”, “method”: “create”, “fields”: { “name”: “John”, “surname: “Smith”, “email”: “john@gmail.com” } } 字段内的键是可变的,这意味着我事先不知道它们 因此,我不需要将json字符串反序列化为对象,而是需要遍历json,以便获取Dictionary中字段内的属性或类似的东西。 我听说过Json.NET库,它能够解析动态jsons,但我不确定它是否已经包含在net-core中了。 在net-core 2.0中实现这一目标的标准/最简单方法是什么? 代码示例将不胜感激。

如何让DataContractJsonSerializer将对象序列化为字符串?

我在C#中有一个包含guid的结构。 我正在使用DataContractJsonSerializer来序列化包含该类实例的对象。 当我直接使用guid时,它被序列化为纯字符串,但现在它被序列化为名称/值对。 这是一个NUnit测试和支持代码,演示了这个问题: private static string ToJson(T data) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof (T)); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, data); return Encoding.Default.GetString(ms.ToArray()); } } [Serializable] private class ID { private Guid _value; public static explicit operator ID(Guid id) { return new ID { _value = id }; } public static […]

在ASP.Net Core MVC中读取JSON post数据

我试图找到一个解决方案,但所有出现的都是以前版本的ASP.Net。 我正在使用JWT身份validation中间件并具有以下方法: private async Task GenerateToken(HttpContext context) { var username = context.Request.Form[“username”]; var password = context.Request.Form[“password”]; //Remainder of login code } 这会将发送的数据视为表单数据,但我的Angular 2前端将数据作为JSON发送。 login(username: string, password: string): Observable { let headers = new Headers({ ‘Content-Type’: ‘application/json’ }); let options = new RequestOptions({ headers: headers }); let body = JSON.stringify({ username: username, password: password }); return […]

启用WCF服务以与JSON一起使用

我创建了一个wcf服务。 当我通过添加作为web服务在.net中使用时,这工作正常。 但我想让它能够用作iPhone应用程序作为JSON调用。 为了测试,我已经在.net中使用它与JSON但它无法正常工作。 我知道之前有这样的问题,我已经找到了这个找不到我的解决方案。 我的配置: 接口代码: [ServiceContract] public interface IGolfPyramidService { [WebInvoke(UriTemplate = “/Test”, Method = “POST”, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] [OperationContract] string Test(); } Myservice.cs代码: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class MyService : IMyService { public string Test() { return “success”; } } 我想使用url格式调用该方法,如: http : //example.com/MyService.svc/test