相关疑难解决方法(0)

XML序列化和继承类型

继我之前的问题之后,我一直致力于将我的对象模型序列化为XML.但我现在遇到了一个问题(quelle surprise!).

我遇到的问题是我有一个集合,它是一个抽象的基类类型,由具体的派生类型填充.

我认为只需将XML属性添加到所涉及的所有类中,一切都会很好.可悲的是,事实并非如此!

所以我在谷歌上做了一些挖掘,现在我明白为什么它不起作用了.在XmlSerializer其实是在为了序列化对象做一些聪明的反射/通过XML,并且因为它的基础上,抽象类型,它不能弄清楚到底是怎么回事了它的交谈.精细.

我确实遇到过CodeProject 上的这个页面,它看起来好像很有帮助(还没有完全阅读/消费),但我想我也想把这个问题带到StackOverflow表中,看看你是否有任何整洁黑客/技巧,以最快/最轻的方式启动和运行.

有一件事我还要补充的是,我不要想往下走XmlInclude的路线.与它有太多的耦合,系统的这个区域正在大量开发,所以这将是一个真正的维护头痛!

c# xml inheritance serialization xml-serialization

84
推荐指数
2
解决办法
5万
查看次数

为什么XmlSerializer不支持Dictionary?

只是好奇为什么词典不受支持XmlSerializer

你可以通过使用DataContractSerializer和写入对象来轻松地绕过它XmlTextWriter,但是如果XmlSerializer考虑到它真的是一个KeyValuePairs数组,那么字典的特征是什么使它难以处理.

实际上,你可以传递一个IDictionary<TKey, TItem>期望的方法IEnumerable<KeyValuePairs<TKey, ITem>>.

c# xml dictionary xmlserializer

46
推荐指数
2
解决办法
3万
查看次数

如何XML序列化字典

我已经能够以这种方式序列化IEnumerable:

[XmlArray("TRANSACTIONS")]
[XmlArrayItem("TRANSACTION", typeof(Record))]
public IEnumerable<BudgetRecord> Records
{
    get 
    {
        foreach(Record br in _budget)
        {
            yield return br;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我意识到现在我需要一个包含集合的字典Dictionary<string, RecordCollection>(RecordCollection实现IEnumerable).

我怎样才能做到这一点?

.net c# xml-serialization xmlserializer

20
推荐指数
4
解决办法
6万
查看次数

Newtonsoft Json中的TypeNameHandling警告

这个链接上,在备注部分提到了" TypeNameHandling".在什么情况下,如果使用序列化/反序列化来自外部源的JSON会有害SerializationBinder?一个工作的例子将不胜感激.

c# serialization json.net

20
推荐指数
2
解决办法
7842
查看次数

xsi:type属性搞乱了C#XML反序列化

我使用XSD.exe根据XML模式(.xsd文件)自动生成C#对象.我正在反序列化OpenCover输出,但其中一个部分类没有正确生成.

这是导致异常的行:

<MethodPoint xsi:type="SequencePoint" vc="0" uspid="1" ordinal="0" offset="0" sl="19" sc="9" el="19" ec="10" bec="0" bev="0" fileid="1" />
Run Code Online (Sandbox Code Playgroud)

这是MethodPoint类的缩短版本:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class CoverageSessionModulesModuleClassesClassMethodsMethodMethodPoint {
    private string vcField;
    private string uspidField;
    private string ordinalField;
    private string offsetField;
    private string slField;
    private string scField;
    private string elField;
    private string ecField;
    private string becField;
    private string bevField;
    private string fileidField;
}
Run Code Online (Sandbox Code Playgroud)

现在我已经浏览了很多.xml文件,但OpenCover输出文件是唯一一个在属性中包含冒号的文件.MethodPoint对象也是唯一包含属性冒号的对象.如您所见,该类不包含该xsi:type属性,我知道只是添加它将因冒号而无效.你如何处理xsi前缀?

这是从其中一个OpenCover XML文件生成的原始.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CoverageSession" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Summary">
    <xs:complexType> …
Run Code Online (Sandbox Code Playgroud)

c# xml xsd deserialization opencover

3
推荐指数
1
解决办法
2551
查看次数

使用 XmlSerializer 序列化多种类型的数组

我尝试使用 XMLSerializer 生成如下所示的 XML,其中 的内容<create>是一个数组,但元素可以是不同的类型(在本例中<vendor><customer>、 和<asset>)。这可能吗?

...
    <create>
        <vendor> 
            <vendorid>Unit - A-1212</vendorid>
            <name>this is the name8</name>
            <vcf_bill_siteid3>FOOBAR8</vcf_bill_siteid3>
        </vendor>             
        <customer>
            <CUSTOMERID>XML121</CUSTOMERID>
            <NAME>XML Customer 111</NAME>
        </customer>             
        <asset>  
            <createdAt>San Jose</createdAt>
            <createdBy>Kevin</createdBy>
            <serial_number>123456789</serial_number>
        </asset> 
    </create>
....
Run Code Online (Sandbox Code Playgroud)

c# xmlserializer

1
推荐指数
1
解决办法
6937
查看次数