使用C#和自定义反序列化器读取XML
我正在尝试反序列化某个API提供的一段XML。然而这个API是哑的,例如,bool不是真的,而是真的。并且有一个元素使用C#和自定义反序列化器读取XML,c#,.net,xml,deserialization,C#,.net,Xml,Deserialization,我正在尝试反序列化某个API提供的一段XML。然而这个API是哑的,例如,bool不是真的,而是真的。并且有一个元素 [XmlElement("Foo")] public bool Foo { get;set; } 然后是匹配的XML: <...><Foo>True</Foo></...> True 不起作用,因为True不是bool的有效表示形式(API是用Python编写的,我认为这更容易理解) 有没有办法在我的属性Foo上添加一些属性来
[XmlElement("Foo")]
public bool Foo { get;set; }
然后是匹配的XML:
<...><Foo>True</Foo></...>
True
不起作用,因为True不是bool的有效表示形式(API是用Python编写的,我认为这更容易理解)
有没有办法在我的属性Foo
上添加一些属性来告诉系统:当你遇到这个元素时,把它放到这个转换类中
编辑:
XML很大,而且大多数都是愚蠢的、不能直接转换的对象,比如234KB
,我需要将其解析为准确的值
是否需要为它们中的每一个编写包装器属性?您可以使用备份属性:
public class MyModel
{
[XmlIgnore]
public bool Foo
{
get
{
return string.Equals(FooXml, "true", StringComparison.OrdinalIgnoreCase);
}
set
{
FooXml = value.ToString();
}
}
[XmlElement("Foo")]
public string FooXml { get; set; }
}
结构是否足够复杂,以至于您真的需要使用内置的XML序列化?你能手工做吗?LINQ to XML通常使这一点变得非常简单。在python中,true区分大小写,必须大写。@Jon说得好,但我想知道是否有可能不使用自定义类型(而不是bool)而按我所希望的方式使用它。我在编写自定义转换器类方面没有问题。我认为C#可以将“True”解析为bool。。你确定这就是它不起作用的原因吗?是的,这是可能的,但我正在尽可能少地使用管道。