是否可以將JSON.NET生成的json與類型名稱處理設置爲常規json?將typenameHandling轉換爲常規json
我的應用程序不能假設任何關於它正在接收的類型,因爲它將是許多1000個類中的1個。我只需要從json中刪除類型信息。
比如我收到此JSON字符串在我的應用程序:
{
"$type": "MyAssembly.MyType, MyAssembly",
"$id": 1,
"MyValue": 5
}
我可以把它轉換成此JSON:
{
"MyValue": 5
}
我試圖加載原始JSON到JObject然後去除所有成員都以$
開頭,但之後發現在使用陣列時失敗,因爲它們可能如下所示:
{
"MyArray": {
"$type": "System.Collections.List, System",
"$values": [
{
"$type": "MyAssembly.MyType, MyAssembly",
"MyValue": 5
}
]
}
}
JSON.NET中是否有任何內容允許進行這種轉換?
這裏是爲了顯示我的意思
class Program
{
static void Main(string[] args)
{
JsonSerializerSettings withNamehandling = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
PreserveReferencesHandling = PreserveReferencesHandling.All,
Formatting = Formatting.Indented
};
var obj = new MyObj();
//This is the json which my application will be receiving. My application does not know about MyObj or MyType.
var json = JsonConvert.SerializeObject(obj, withNamehandling);
Console.WriteLine(json);
//Deserialize the object without namehandling enabled
var deserializeObject = JsonConvert.DeserializeObject(json);
//Serialize again without namehandling enabled
var json2 = JsonConvert.SerializeObject(deserializeObject, Formatting.Indented);
//Metadata removed from root node but not children.
Console.WriteLine(json2);
Console.ReadLine();
}
}
class MyObj
{
public List<MyType> Types { get; set; } = new List<MyType>()
{
new MyType()
{
Value = 5
}
};
}
class MyType
{
public int Value { get; set; }
}
你想怎麼辦'PreserveReferencesHandling'令牌什麼樣'「$ ID」'和'「$ REF」'?第一個''$ id「'很容易刪除,但第二個是有問題的,因爲''$ ref」'只是一個指向JSON層次結構其他地方的指針。在您的問題的原始版本中,並沒有要求移除'PreserveReferencesHandling'令牌,但您似乎在更新中添加了它,使其更加複雜。 – dbc