我的情况:
我从一个库中获得了一个类,该类具有一堆我不需要的字段,并且会导致反序列化问题,我只需要其中一个字段即可进行序列化和反序列化。我懂了! JsonConverter可以解决问题,对吗?因此,我想使用JsonConverter序列化和反序列化对象,但是我的问题是我想保留Json.Net生成的“标头”内容,例如“ $ id”和“ $ type”,因为它的序列化方式与其他对象类似。我不知道要在序列化中找到当前位置的$ id,因此我可以使用一些帮助!
public override void WriteJson(JsonWriter writer, object v, JsonSerializer serializer)
{
MyObject myObject = (MyObject)v;
string myCoolString = myObject.myString;
MyObjectSerialized myObjectSerialized = new MyObjectSerialized()
{
myString = myCoolString
};
JObject jo = JObject.FromObject(myObjectSerialized);
jo.WriteTo(writer);
}
输出:
{
"myString":"test"
}
预期输出:
{
"$id":"34",
"$type":"MyObject, Assembly-CSharp",
"myString":"test"
}
答案 0 :(得分:0)
我知道了。如果获得传递给WriteJson方法的JsonSerializer的ReferenceResolver,则可以使用以下方法将引用ID提取到要序列化的对象中:
string id = serializer.ReferenceResolver.GetReference(serializer, v);
由于您要传递“ serializer”作为上下文,因此这是从中获取ID的相对点。我将使用与最初帖子的评论中发布的方法类似的方法来获取类型。