作为
this question的后续内容,我无法弄清楚如何从JSON输入中的所有字段名称中删除句点.
我正在使用Newtonsoft库将XML转换为JSON并创建一个BsonDocument插入到MongoDB数据库中,如下所示:
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
String jsonText = JsonConvert.SerializeXmlNode(doc);
BsonDocument = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(jsonText);
我无法插入这个,因为我会得到一个序列化异常,因为元素名称包含一个句点.如何通过JSON字符串或BsonDocument进行处理以更改它们?
我已成功递归遍历我的文档:
private void Print(BsonDocument document)
{
foreach (BsonElement element in document)
{
Console.WriteLine(element.Name);
if (element.Value.IsBsonDocument)
{
Print(element.Value.AsBsonDocument);
}
else if (element.Value.IsBsonArray)
{
var array = element.Value.AsBsonArray;
foreach (BsonDocument doc in array)
{
Print(doc);
}
}
}
}
但是,BsonDocument.Name不是我可以设置的字段,只能获取.如何更新BsonDocument或JSON字符串以删除无效的字段名称?
最佳答案 我不太了解你的XML / JSON结构,但为什么在将它转换为JSON并替换ElementNames之前不处理XML?如
ANSWER所述?
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText(@"{path}\xml.xml", Encoding.Default));
XmlNodeList nodeList = xmlDoc.SelectNodes("//*['.' = substring(name(), string-length(name())- string-length('.') +1)]");
foreach (XmlNode node in nodeList)
{
string newName = node.Name.Replace(".", "");
// create new (renamed) Content node
XmlNode newNode = xmlDoc.CreateElement(newName);
newNode.InnerXml = node.InnerXml;
// replace existing BatteryTest node with newly renamed Content node
node.ParentNode.InsertBefore(newNode, node);
node.ParentNode.RemoveChild(node);
}
xmlDoc.Save(@"{path}\xml.xml");