我有一个XML字符串:
<?xml version='1.0'?><response><error code='1'> Success</error></response>
Run Code Online (Sandbox Code Playgroud)
一个元素与另一个元素之间没有线条,因此很难阅读.我想要一个格式化上述字符串的函数:
<?xml version='1.0'?>
<response>
<error code='1'> Success</error>
</response>
Run Code Online (Sandbox Code Playgroud)
如果不依靠自己手动编写格式函数,是否有任何我可以随意使用的.Net库或代码片段?
我现在正在进入MVC,但在我的"要在某些方面学习"列表中,我也有WCF.
我只是想知道WCF是否应该/可以在MVC应用程序中使用?背景是我希望桌面应用程序(.NET 3.5,WPF)与我的MVC网站交互,我想知道在两者之间传输数据的最佳方法是什么.我应该只使用特殊的视图/让控制器返回JSON或XML(使用ContentResult)?
也许更重要的是,反过来说,我可以打电话给特殊控制器吗?不确定授权如何在这样的环境中起作用.我可以使用Windows身份验证或(如果站点正在运行表单身份验证)让用户将他/她的凭据存储在应用程序中,但我基本上会在我的应用程序中创建一个HTTP客户端.所以虽然MVC => Application看起来很简单,但是Application => MVC似乎有点棘手并且可能用于WCF?
我不是试图在这里强制使用WCF,但我只是想知道在MVC应用程序中是否确实存在WCF的良好用例.
我有这种扩展方法
public static string SerializeObject<T>(this T value)
{
var serializer = new XmlSerializer(typeof(T));
var settings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(true),
Indent = false,
OmitXmlDeclaration = false,
NewLineHandling = NewLineHandling.None
};
using(var stringWriter = new StringWriter())
{
using(var xmlWriter = XmlWriter.Create(stringWriter, settings))
{
serializer.Serialize(xmlWriter, value);
}
return stringWriter.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
但每当我调用它时,它都有一个utf-16指定的编码,即<?xml version="1.0" encoding="utf-16"?>.我究竟做错了什么?
环境是VS2008,.Net 3.5
以下C#代码(注意UTF8的指定编码)
XmlWriterSettings settings = new XmlWriterSettings ();
StringBuilder sb = new StringBuilder();
settings.Encoding = System.Text.Encoding.UTF8;
settings.Indent = false;
settings.NewLineChars = "\n";
settings.ConformanceLevel = System.Xml.ConformanceLevel.Document;
XmlWriter writer = XmlWriter.Create (sb, settings);
{
// Write XML data.
writer.WriteStartElement ("CCHEADER");
writer.WriteAttributeString ("ProtocolVersion", "1.0.0");
writer.WriteAttributeString ("ServerCapabilities", "0x0000000F");
writer.WriteEndElement ();
writer.Flush ();
}
Run Code Online (Sandbox Code Playgroud)
实际上生成XML(> <省略,因为它们上面有SO barfs):
?xml version ="1.0"encoding ="utf-16"?
CCHEADER ProtocolVersion ="1.0.0"ServerCapabilities ="0x0000000F"/
为什么我在这里生成了错误的编码?我究竟做错了什么 ?