对象序列化如何

时间:2011-05-17 18:58:08

标签: c# serialization

如何快速(不是很多事情)序列化该对象?

Dictionary<int, List<int[,]>>

原始XmlSerializer不支持字典和数组[,]

2 个答案:

答案 0 :(得分:1)

修改

由于Dictionary不支持XmlSerializer我的原始答案不正确,但我提供了其他序列化的参考。更好的答案是实现自己的KeyValuePair类并将Dictionary转换为此类,以便可以序列化。可以找到关于如何实施以及为什么需要这样做的一个很好的解释here


注意:这是我的回答并且不正确。

此示例使用内置的.Net XmlSerializer类序列化为字符串。序列化程序可以写入任何流,例如,如果要序列化为文件,则需要使用FileWriter而不是StringWriter

// serialize into a string
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);

// create a serializer for my specific type
XmlSerializer ser = new XmlSerializer(typeof(Dictionary<int, List<int[,]>>));

// perform serialization
ser.Serialize(sw, myObj);

// retrieve the final serialized result as a string I can work with
string serialized = sb.ToString();

// do something with serialized object

答案 1 :(得分:0)

如果您特别需要XML序列化,则自定义类可能会对您有所帮助。既然你实际上没有做KeyValuePair尝试这样的事情:

[XMLSerializable]
public class CustomDictionary
{
    public int Key {get; set;}
    public List<Coordinate> Value {get; set;}
}

[XMLSerializable]
public class Coordinate
{
   public int X;
   public int Y;
}

假设标准Point(我相信是Double X,Double Y)将不起作用,并且您只在int数组的每一列中保存一个值。当然,您可以修改该容器类以满足您的特定需求。

一旦你正确标记了代码(不 - 我认为不是这样),你就可以调用股票XmlSerializer来写入XML。