相关疑难解决方法(0)

如何动态添加XmlInclude属性

我有以下课程

[XmlRoot]
public class AList
{
   public List<B> ListOfBs {get; set;}
}

public class B
{
   public string BaseProperty {get; set;}
}

public class C : B
{
    public string SomeProperty {get; set;}
}

public class Main
{
    public static void Main(string[] args)
    {
        var aList = new AList();
        aList.ListOfBs = new List<B>();
        var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
        aList.ListOfBs.Add(c);

        var type = typeof (AList);
        var serializer = new XmlSerializer(type);
        TextWriter w = …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization xmlinclude

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

使用XmlSerializer序列化派生类

我正在使用XMLSerializer来序列化包含通用列表的对象

List <ChildBase> Children {get;set}

问题是每个元素ChildBase实际上都是抽象类.当我尝试反序列化时,我得到一个invalidOperationException

有没有办法可以将XMLSerializer与派生对象一起使用?谢谢.

c# xml-serialization

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

使用多种类型反序列化 XML

我正在尝试反序列化 XML,其中一些相同的名称标签具有不同的 xsi 类型:

<user-defined-data-row>
  <field name="entity">
    <field-value xsi:type="field-text-valueType">
      <value>Test</value>
    </field-value>
  </field>
  <field name="expiry_date">
    <field-value xsi:type="field-date-valueType">
      <value>2001-10-07</value>
    </field-value>
  </field>
</user-defined-data-row>
Run Code Online (Sandbox Code Playgroud)

这很容易通过将 xml 反序列化到这个模型中来实现:

[XmlRoot(ElementName = "field-value", Namespace = "http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0")]
[XmlType("field-text-valueType")]
public class Fieldvalue
{
    [XmlElement(ElementName = "value", Namespace = "http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0")]
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

唯一不同的是 XML 中的类型:

字段文本值类型

字段日期值类型

我怎样才能让 C# 类使用类似的东西来解释这两种类型

[XmlType("field-text-valueType")]
Run Code Online (Sandbox Code Playgroud)

编辑:反序列化而不是序列化

c# xml xml-serialization xsi xmlserializer

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

如何将动态对象序列化为 xml c#

我有一个里面object {System.Collections.Generic.List<object>}包含 1000 个object {DynamicData},每个有 4 个键和值,另一个List有 2 个键和值。我需要将这个对象序列化为一个 XML 文件,我尝试了正常的序列化,但它给了我这个异常 = The type DynamicData was not expected,我如何序列化这个对象?

这是代码:

           //output is the name of my object
            XmlSerializer xsSubmit = new XmlSerializer(output.GetType());
            var xml = "";

            using (var sww = new StringWriter())
            {
                using (XmlWriter writers = XmlWriter.Create(sww))
                {
                    try
                    {
                        xsSubmit.Serialize(writers, output);
                    }
                    catch (Exception ex)
                    {

                        throw;
                    }
                    xml = sww.ToString(); // Your XML
                }
            }
Run Code Online (Sandbox Code Playgroud)

我可以逐行和逐个元素地创建 xml 文件,但我想要更快、更少代码的东西。我的对象的结构是这样的:

output (count 1000) …
Run Code Online (Sandbox Code Playgroud)

c# xml xml-serialization xmlserializer dynamicobject

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

C# 无法反序列化包含 xsi:type 的 XML

我正在尝试反序列化以下 XML

<?xml version="1.0" encoding="UTF-8"?>
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
  <EnvelopeVersion>2.0</EnvelopeVersion>
  <Header>
    <MessageDetails>
      <Class>DRUG_DATA</Class>
      <Qualifier>response</Qualifier>
      <Function>submit</Function>
      <CorrelationID>BD694DAAA26AA6068EAAAE5C7746CE54</CorrelationID>
      <Transformation>XML</Transformation>
    </MessageDetails>
    <SenderDetails>
      <IDAuthentication>
        <SenderID />
        <Authentication>
          <Method />
          <Role />
          <Value />
        </Authentication>
      </IDAuthentication>
    </SenderDetails>
  </Header>
  <GovTalkDetails>
    <Keys>
      <Key Type="SpokeName" />
    </Keys>
  </GovTalkDetails>
  <Body>
    <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
      <S:Body>
        <ns2:getGenericDrugsResponse xmlns:ns2="http://webservice.sirkb/">
          <return>
            <DRUG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:genericDrug">
              <GENERIC_DRUG_ID>147</GENERIC_DRUG_ID>
              <GENERIC_DRUG_NAME>Amoxicilline 125mg/5ml - 60ml</GENERIC_DRUG_NAME>
            </DRUG>
            <DRUG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:genericDrug">
              <GENERIC_DRUG_ID>149</GENERIC_DRUG_ID>
              <GENERIC_DRUG_NAME>Amoxicilline 250mg/5ml - 60ml</GENERIC_DRUG_NAME>
            </DRUG>            
            <DRUG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:genericDrug">
              <DOSAGE>10mg/5ml</DOSAGE>
              <GENERIC_DRUG_ID>2312</GENERIC_DRUG_ID>
              <GENERIC_DRUG_NAME>Vinorelbine (as vinorelbine tartrate)</GENERIC_DRUG_NAME>
              <PHARMACEUTICAL_FORM>concentrate for solution for infusion</PHARMACEUTICAL_FORM>
            </DRUG>
            <DRUG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …
Run Code Online (Sandbox Code Playgroud)

c# xml xml-deserialization

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