标签: xmlserializer

从不调用XmlSerializer中的重写反序列化

我慢慢地感觉到我的理智在边缘磨损,而我的思绪慢慢消失.

我想扩展XmlSerializer,由于某种原因它不支持反序列化通知.

我有以下代码:

public class NotificationXmlSerializer : XmlSerializer
{
    public NotificationXmlSerializer(Type type)
        : base(type)
    { 
    }

    protected override object Deserialize(XmlSerializationReader reader)
    {
        var x = base.Deserialize(reader);
        var methods = x.GetType().GetMethods().Where(method => method.GetCustomAttributes(true).Any(attr => attr is OnDeserializedAttribute));

        return x;
    }
}
Run Code Online (Sandbox Code Playgroud)

并以这种方式使用它:

    using (MemoryStream fs = new MemoryStream())
    {
        var x = new NotificationXmlSerializer(typeof(int));
        x.Serialize(fs, 5);
        fs.Seek(0, SeekOrigin.Begin);
        var y = x.Deserialize(fs);
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我在我的Deserialize覆盖中放置一个断点,它永远不会被击中!即使我故意在那里抛出异常,程序功能也是正常的,所以我相信它永远不会被击中.

为什么他们会让我覆盖一个内部方法Deserialize而不会让我影响它的任何东西?

我究竟做错了什么?

最好的问候,马克斯

c# extend xmlserializer

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

XmlSerializer:反序列化字符串数组

鉴于此XML:

<Items>
 <Item>a</Item>
 <Item>b</Item>
</Items>
Run Code Online (Sandbox Code Playgroud)

如何使用反序列化XmlSerializer?要么成为某种自定义类型的数组,要么只是成为一个string[].

我知道如果最里面的标签被称为"字符串",我可以这样做,但我想保留一个自定义名称.

.net xml xmlserializer

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

带有System.Object对象的XmlSerializer

我似乎无法找到对此的明确回应,这让我发疯.XmlSerializer类似乎适用于任何已定义的内容,甚至适用于嵌套类.但是当其中一个类包含System.Object时,它就会呕吐.有没有人知道这方面的简单方法?

namespace test
{
    public class SomeList
    {
        public object obj;
    }

    public class Person
    {
        public string first;
        public string last;
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Creating object...");
                Person me = new Person();
                me.first = "MyFirst";
                me.last = "MyLast";

                Console.WriteLine("- Serialized: " + serialize_xml<Person>(me));
                Console.WriteLine("");
                Console.WriteLine("Creating object with embedded generic...");
                SomeList test = new SomeList();
                test.obj = me;
                Console.WriteLine("- Serialized: " + serialize_xml<SomeList>(test));

                Console.WriteLine("");
                Console.Write("Press ENTER to exit.");
                Console.ReadLine();
                return;
            }
            catch (Exception …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization exception-handling xmlserializer

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

xmlserializernamespaces 将命名空间添加到特定元素

我有一个对象,我想序列化它。我想将命名空间添加到 xml 文档的特定元素。我从 1 个默认 xml 创建了多个 .xsd 文件。我使用 XmlSerializer。

命名空间应该在<sos:element. 这就是我想要的:

<env:root
  xmls:env ="httpenv"
  xmlns:sos="httpsos">
   <env:body>
     <sos:element 
       xmlns:abc="" <--------------my namespaces are located in <sos:element
       ...
Run Code Online (Sandbox Code Playgroud)

如果我使用类似的东西

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("abc", "httpabc");
ns.add....
StringWriter stringWriter = new StringWriter();   
serializer.Serialize(stringWriter, ObjectToSerialize, ns);
Run Code Online (Sandbox Code Playgroud)

我将得到以下内容

<env:root
  xmls:env ="httpenv"
  xmlns:sos="httpsos"
  xmlns:abc="" <-------------I do not want it here; I want it in <sos:element
   <env:body>
     <sos:element> 
      ...
Run Code Online (Sandbox Code Playgroud)

有没有办法指定我想要在哪里(在哪个元素中)声明我的命名空间,或者它们都在根元素中声明?

c# xml-serialization xmlserializer

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

XmlSerializer缓存工厂

遇到了一个工厂类,如果我想替换下面的XmlSerializer代码,我不完全确定如何使用它.

样本模型

public class SampleData
{
    public string Name { get; set; }
    public string Country { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现有守则

List<SampleData> objects = new List<SampleData>();
objects.Add(new SampleData() { Country = "Australia", Name = "aus" });

StringWriter writer = new StringWriter();

XmlSerializer serializer = new XmlSerializer(typeof(List<SampleData>));
serializer.Serialize(writer, objects);
Run Code Online (Sandbox Code Playgroud)

工厂类

public static class CachingXmlSerializerFactory
{
    private static readonly Dictionary<string, XmlSerializer> Cache = new Dictionary<string, XmlSerializer>();

    private static readonly object SyncRoot = new object();

    public static XmlSerializer …
Run Code Online (Sandbox Code Playgroud)

c# asp.net factory-pattern xmlserializer c#-4.0

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

使用 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
查看次数

XmlSerializer / StreamWriter 将多种类型/类放入同一个 xml 文件中

我想根据架构 (XSD) 创建一个 XML 文件。我在 StackOverflow 上发现了这个问题:使用 XSD 文件生成 XML 文件

它适用于像这样的简单示例:

var data = new ProfileType();
data.Name = "Test";
data.Address = "Street";

var serializer = new XmlSerializer(typeof(ProfileType));
using (var stream = new StreamWriter("D:\\test.xml")) serializer.Serialize(stream, data);
Run Code Online (Sandbox Code Playgroud)

但是如何将更多的类/类型添加到同一个 xml 文件中?如果我在下面添加这些代码行,它们会覆盖 text.xml 文件:

var data2 = new MemberType();
data2.Age = "25";
data2.Code = "Z14x";
data2.Color = "Red":

var serializer2 = new XmlSerializer(typeof(MemberType));
using (var stream = new StreamWriter("D:\\test.xml")) serializer2.Serialize(stream, data2);
Run Code Online (Sandbox Code Playgroud)

.net c# xml xsd xmlserializer

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

如何使用 XmlSerializer 和 autofac 注入依赖项?

我有一个名为SomeRule可以以 XML 格式序列化的类。该类使用ISomeService我想通过 autofac 注入的 。

[Serializable]
public class SomeRule 
{
    [XmlAttribute("Attribute1")]
    public string Attribute1 {get;set;}

    [XmlAttribute("Attribute2")]
    public string Attribute2 { get; set; }

    private readonly ISomeService m_someService;

    private SomeRule()
    {
    }

    public SomeRule(ISomeService someService)
    {
        m_someService = someService;
    }

    public void DoSomething()
    {
        m_someService.DoStuff(Attribute1);
    }
}

public interface ISomeService {

    void DoStuff(string param);
}

public class SomeServiceImpl : ISomeService
{
    public void DoStuff(string param)
    {
        //  Do something with the stuff.
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的程序接收到一个我想要反序列化的 XML …

c# dependency-injection autofac xmlserializer

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

xml 序列化和继承类型

我收到错误“{”类型 Device1 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。"}"

目前我有:

public abstract class Device
{
   ..
} 

public class Device1 : Device
{ ... }

[Serializable()]
public class DeviceCollection : CollectionBase
{ ... }

[XmlRoot(ElementName = "Devices")]
public class XMLDevicesContainer
{
    private DeviceCollection _deviceElement = new DeviceCollection();

    /// <summary>Devices device collection xml element.</summary>
    [XmlArrayItem("Device", typeof(Device))]
    [XmlArray("Devices")]
    public DeviceCollection Devices
    {
        get
        {
            return _deviceElement;
        }
        set
        {
            _deviceElement = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在做:

        XMLDevicesContainer devices = new XMLDevicesContainer();
        Device device = …
Run Code Online (Sandbox Code Playgroud)

c# serialization xmlinclude xmlserializer inherited

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

序列化枚举类型会发出不同的元素名称

致力于XML序列化.序列化枚举类型时,要更改它的xml元素名称.任何帮助,将不胜感激.

我使用.Net xml序列化来序列化这个对象,并产生下面的xml输出

<MyEnums>   <MyEnum>One</MyEnum>    <MyEnum>Two</MyEnum>    <MyEnum>Three</MyEnum></MyEnums>
Run Code Online (Sandbox Code Playgroud)

这是班级

public class Request
{
        public List<MyEnum> MyEnums { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我想要发出的XML

<MyEnums>
<ModifiedElementName>One</ModifiedElementName>
<ModifiedElementName>Two</ModifiedElementName>
<ModifiedElementName>Three</ModifiedElementName>
Run Code Online (Sandbox Code Playgroud)

这是Enum Type

enum MyEnum
{
    One,
    Two,
    Three
}
Run Code Online (Sandbox Code Playgroud)

期望输出为xml

<ModifiedElementName>One</ModifiedElementName>
Run Code Online (Sandbox Code Playgroud)

.net c# xmlserializer

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