我目前的设置如下:
客户端Javascript JSON字符串化对象如此传递给服务器函数
客户端:
pre-compiled header file
服务器:
var requestObject = JSON.stringify(clientObject);
$.ajax({
url: 'ServerClass.aspx/ServerFunction',
data: requestObject,
dataType: "json",
contentType: "application/json; charset=utf-8",
cache: false,
context: document.body,
type: 'POST',
success: saveSuccessfulFunction
});
存储过程成功从传入的XMLDocument中提取不同的节点/属性,然后继续执行相关的update / insert命令。
[WebMethod(EnableSession = true)]
public static int SaveAllReportOptions(string requestObject)
{
XmlDocument xdoc = JsonConvert.DeserializeXmlNode("{\"root\":" + clientObject + "}", "roots");
DBClass.Save(xdoc);
}
public int Save(XmlDocument clientObject)
{
SqlCommand dCmd = new SqlCommand("MyStoredProcedure", conn);
dCmd.CommandType = CommandType.StoredProcedure;
dCmd.Parameters.AddWithValue("@objectXML", SqlDbType.Xml).Value = clientObject.InnerXml;
SqlParameter returnValue = dCmd.Parameters.Add("@ret", SqlDbType.Int);
returnValue.Direction = ParameterDirection.ReturnValue;
conn.Open();
dCmd.ExecuteNonQuery();
conn.Close();
int i = Convert.ToInt32(dCmd.Parameters["@ret"].Value);
return i;
}
我的问题不在于上述代码,但是从某些在线/内部软件编码标准中观察到了某些问题。
来源1
X不要使用XmlNode或XmlDocument来表示XML数据。支持使用IXPathNavigable,XmlReader,XmlWriter或XNode的子类型的实例。 XmlNode和XmlDocument不是为在公共API中公开而设计的。
来源2
✓使用XmlReader,IXPathNavigable或XNode的子类型作为接受或返回XML的成员的输入或输出。 使用这些抽象而不是XmlDocument,XmlNode或XPathDocument,因为这会将方法与内存中XML文档的特定实现分离,并允许它们使用公开XNode,XmlReader或XPathNavigator的虚拟XML数据源。
来源3
如果要创建表示基础对象模型或数据源的XML视图的类型,请不要对XmlDocument进行子类化。
基本上,我想知道它是否安全可靠,足以将XMLDocument用于上述目的。如果没有,如果有任何替代方案更适合我的方案。