我正在尝试使用silverlight 5和c#将Object转换为xml,并且我有以下错误:
Error 1 'System.Text.Encoding.GetString(byte[])' is inaccessible due to its protection level
对应于行:
return utf8.GetString(mem.ToArray());
在我的Xml.cs类
中using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml.Serialization;
using System.IO;
using System.Text;
namespace SliderLastTry
{
public static class Xml
{
public static string ToXml(this object objectToSerialize)
{
var mem = new MemoryStream();
var ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
var utf8 = new UTF8Encoding();
return utf8.GetString(mem.ToArray());
}
}
}
Paramter.cs是:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SliderLastTry
{
public class Parameter
{
public string Name {get; set; }
}
}
包含类的主要功能是:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SliderLastTry
{
public static class ControlClass
{
public static void Main()
{
Parameter pram = new Parameter();
pram.ToXml();
}
}
}
有人可以帮我修复错误吗?
答案 0 :(得分:4)
我认为silverlight没有overload由于某种原因只有byte[]
。
您只需使用another overload,index
和count
。
var bytes = mem.ToArray();
return utf8.GetString(bytes, 0, bytes.Length);
FWIW GetString
在内部以相同的方式调用另一个重载:)
答案 1 :(得分:2)
说实话,这里最好的选择是使用StringWriter
,因为.NET string
不直接映射到UTF-8(实际上是UTF-16,如果有的话):
using(var writer = new StringWriter())
{
ser.Serialize(writer, objectToSerialize);
return writer.ToString();
}
这也具有避免所有数据(string
vs byte[]
)的额外重复的性能优势。
如果必须使用byte[]
版本,则可以使用不同的重载来指定数组的边界。另请注意,传入底层缓冲区可避免数据的第三个重复(即内存流中的基础byte[]
,从{{1}返回的临时byte[]
},以及最终在ToArray()
中的数据。
string