Zig*_*gnd 17 c# json json.net deserialization
我试图了解在Json.NET序列化回调中应包含的StreamingContext参数是什么,首先我认为你会允许我访问正在读取的当前json树,但它似乎没有,我试过可能是JSON对象的安排,但是没有它们我可以从StreamingContext参数中获得任何东西.
这是一个显示我正在做的事情的例子,如果我错了,请纠正我:
using System;
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace Testes
{
public class Program
{
[JsonObject(MemberSerialization.OptIn)]
public class Person
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("age")]
public int Age { get; set; }
[OnDeserialized]
internal void OnDeserializedMethod(StreamingContext context)
{
Console.WriteLine(String.Format("OnDeserialized: {0}", context.Context));
}
[OnDeserializing]
internal void OnDeserializingMethod(StreamingContext context)
{
Console.WriteLine(String.Format("OnDeserializing: {0}", context.Context));
}
}
public static void Main(string[] args)
{
var lucy = JsonConvert.DeserializeObject<Person>("{ 'id': 1, 'name': 'Lucy', 'age': 22 }");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ers 14
好问题.我自己经常想到这一点,所以你激励我去发现.
通过Json.Net 源代码进行搜索,看起来StreamingContext串行器完全没有使用它,而只是从串行器设置传递到可能需要它的其他地方.我猜这是为了支持.NET ISerializable接口,它的合同要求实现者提供一个接受一个的构造函数StreamingContext.StreamingContext默认情况下,Json.Net提供空,但如果需要,允许您在设置中明确设置它.您可以通过对Main方法进行少量更改来自行查看:
public static void Main(string[] args)
{
JsonSerializerSettings settings = new JsonSerializerSettings
{
Context = new StreamingContext(StreamingContextStates.Other, "foo")
};
var json = @"{ ""id"": 1, ""name"": ""Lucy"", ""age"": 22 }";
var lucy = JsonConvert.DeserializeObject<Person>(json, settings);
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
输出:
OnDeserializing: foo
OnDeserialized: foo
Run Code Online (Sandbox Code Playgroud)
简而言之,StreamingContext在大多数情况下,该参数不会非常有用(因为默认情况下它是空的).它绝对不提供对序列化或反序列化的JSON树的访问.
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |