Hca*_*tek 39 c# iostream stream xml-serialization datacontractserializer
我有一个关于datacontractserializer的快速问题.也许这更像是一个流问题.我发现了一段将xml写入文件流的代码.我基本上不想要文件,只需要字符串输出.
public static string DataContractSerializeObject<T>(T objectToSerialize)
{
var fs = new FileStream("test.xml", FileMode.OpenOrCreate);
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(fs, objectToSerialize);
fs.Close();
return fs.ToString();
}
Run Code Online (Sandbox Code Playgroud)
fs.ToString()显然不是我想要的.什么流或编写器等,我可以只使用返回正确的字符串而不创建文件?我确实查看了文件流创建的XML,这正是我正在寻找的.XmlSerializer编写的XML有点奇怪,在这种情况下我更喜欢DataContractSerializer的输出.谁能指出我正确的方向?
mar*_*c_s 67
像这样的东西 - 把你的输出放入一个MemoryStream然后读回来:
public static string DataContractSerializeObject<T>(T objectToSerialize)
{
using(MemoryStream memStm = new MemoryStream())
{
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(memStm, objectToSerialize);
memStm.Seek(0, SeekOrigin.Begin);
using(var streamReader = new StreamReader(memStm))
{
string result = streamReader.ReadToEnd();
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*Pat 27
感谢@ xr280xr指出我在第一稿中忘记了StringWriter处理.
/// <summary>
/// Converts this instance to XML.
/// </summary>
/// <returns>XML representing this instance.</returns>
public string ToXml()
{
var serializer = new DataContractSerializer(this.GetType());
using (var output = new StringWriter())
using (var writer = new XmlTextWriter(output) { Formatting = Formatting.Indented })
{
serializer.WriteObject(writer, this);
return output.GetStringBuilder().ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
roo*_*oot 20
甚至更容易:
var serializer = new DataContractSerializer(typeof(T));
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
serializer.WriteObject(writer, objectToSerialize);
writer.Flush();
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34963 次 |
| 最近记录: |