【发布时间】:2014-10-20 08:12:03
【问题描述】:
我有一个类,我将它序列化为一个 XML 字符串。没有问题。
反序列化也可以,但它会将 XML“true”的字段设置为 false(可能是因为它无法转换为布尔值 true。
所以我用
装饰了那个房子public class X
{
// ...
private bool _status = false;
[XmlText]
public bool Status {
get {return _status;}
set {_status=value;}
}
// ...
}
然后我得到“xmlserializer - 出现反映类型 X 的错误”...
那么除了用字符串 Status 替换我的所有检查之外,还有什么解决方法?
参考: - XmlSerializer - There was an error reflecting type - Deserialize boolean element with string attribute
应要求更新: 序列化/反序列化类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// for serializer:
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace StackOverflow
{
static class Serializing
{
public static T XmlDeserializeFromString<T>(this string objectData)
{
return (T)XmlDeserializeFromString(objectData, typeof(T));
}
public static object XmlDeserializeFromString(this string objectData, Type type)
{
var serializer = new XmlSerializer(type);
object result;
using (TextReader reader = new StringReader(objectData))
{
result = serializer.Deserialize(reader);
}
return result;
}
public static string Serialize<T>(this T value)
{
if (value == null) { return string.Empty; }
try
{
var xmlserializer = new XmlSerializer(typeof(User));
var stringWriter = new StringWriter();
using (var writer = XmlWriter.Create(stringWriter))
{
xmlserializer.Serialize(writer, value);
return stringWriter.ToString();
}
}
catch (Exception e)
{
throw new Exception("A Serialization Error Occurred", e);
}
}
}
}
【问题讨论】:
-
好吧,您引用的示例鞋是一个 .config 文件。您从哪里获得状态读取
-
对象中的状态字段可以通过管道中的很多方法来设置。最后我 xmlserializer.Serialize(writer,value) 它
-
当我们看到的只是公共 bool 状态时,很难确定发生了什么......你能显示你正在序列化该对象的实际代码吗
-
在您的问题中退后一步,
Deserializing also works but it sets a field that is the XML "true" to false (probably because it can not convert to boolean true.- 也许您太愿意接受之前的问题?我怀疑还有其他问题。 -
这就是我的意思——还有其他问题——因为这不是通常发生的事情,对吧! (用一个单独的小点头应用程序试试。)这个字符串是什么?它是如何存储的(在序列化/反序列化之前和之后)?也许它的编码不像预期的那样?
标签: c# xml generics serialization