标签: xml-serialization

.NET XML Seralization

我正在研究一组将用于序列化为XML的类.XML不是由我控制的,而且组织得相当好.不幸的是,有几组嵌套节点,其中一些的目的只是为了保存他们孩子的集合.根据我目前对XML序列化的了解,这些节点需要另一个类.

有没有办法使类序列化为一组XML节点而不是一个.因为我觉得我像泥一样清醒,所以说我们有xml:

<root>
    <users>
        <user id="">
            <firstname />
            <lastname />
            ...
        </user>
        <user id="">
            <firstname />
            <lastname />
            ...
        </user>
    </users>
    <groups>
        <group id="" groupname="">
            <userid />
            <userid />
        </group>
        <group id="" groupname="">
            <userid />
            <userid />
        </group>
    </groups>
</root>
Run Code Online (Sandbox Code Playgroud)

理想情况下,3个班级是最好的.一类root与集合usergroup对象.然而,最好的我可以计算的是,我需要一个类root,users,user,groupsgroup,其中usersgroups包含的唯一集合usergroup分别,并root包含一个usersgroups对象.

在那里谁知道比我更好?(别撒谎,我知道有).

.net xml serialization xml-serialization

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

如何使用XmlSerializer类反序列化这个简单的xml配置?

我有以下xml我想反序列化成一个类

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <element1>String1</element1>
  <element2>String2</element2>
</root>
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其序列化为以下类:

    [XmlRoot("root")]
    public class root
    {
        [XmlElement("element1")]
        internal string element1 { get; set; }

        [XmlElement("element2")]
        internal string element2 { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下代码反序列化它时,实例化配置对象,但字符串为空.

     using (TextReader reader = new StreamReader(configFile))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(root));
            this.config = (root)serializer.Deserialize(reader);
        }
Run Code Online (Sandbox Code Playgroud)

我尝试使用xsd.exe创建一个xsd,然后创建一个基于此的类,但该工具生成的杂乱太多.我想我离这儿很近.我错过了什么?

xml xml-serialization xsd.exe

0
推荐指数
2
解决办法
2090
查看次数

XmlSerialization和Attributes - 防止属性被序列化

有没有办法让.NET中的XmlSerialization在序列化时忽略某些属性?

例如,我有一个名为IsValid的公共bool属性,它是我不想序列化的对象的唯一属性.我怎么能这样做?

.net xml-serialization

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

XmlSerializer的表现并不像我认为的那样

我已经使用XmlSerializer多年没有任何问题.我开始了一个新项目,并且我创建了扩展List.当我去序列化数据时,我丢失了我添加到班级的属性.显然,我可以通过改变我的类来解决这个问题,因此它不再扩展List.我真的只是想知道为什么XmlSerializer会忽略List上的属性.

var data = new Data { Number = 3 };
data.AddRange(Enumerable.Range(5, 5));
var serializer = new XmlSerializer(typeof(Data));
var memoryStream = new MemoryStream();
serializer.Serialize(memoryStream, data);
memoryStream.Position = 0;
var dataSerialized = new StreamReader(memoryStream).ReadToEnd();

public class Data : List<int>
{
    public int Number
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

在dataSerialized上面的代码片段看起来像这样(它缺少'Number'属性):

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <int>5</int>
  <int>6</int>
  <int>7</int>
  <int>8</int>
  <int>9</int>
</ArrayOfInt>
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

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

是否有更简单的方法来反序列化类似的XML文件?

我正在编写一个类库,它抽象出网站上XML文件中包含的数据.每个XML文件使用相同的根元素:page.page依赖于我正在下载的特定文件的后代.例如:

<!-- http://.../groups.xml -->
<page url="/groups.xml">
  <groups>
    <group id="1" >
      <members>
        <member name="Adrian" />
        <member name="Sophie" />
        <member name="Roger" />
      </members>
    </group>
  </groups>
</page>

<!-- http://.../project.xml?n=World%20Domination -->
<page url="/project.xml">
  <projectInfo>
    <summary classified="true" deadline="soon" />
    <team>
      <member name="Pat" />
      <member name="George" />
    </team>
  </projectInfo>
</page>
Run Code Online (Sandbox Code Playgroud)

最后还有一些我想要下载和处理的XML文件.出于这个原因,我一直试图想出一个很好的,干净的方法来反序列化数据.我尝试了一些方法,但是当我回顾我的代码时,每种方法都让我觉得有点脏.我最新的化身使用以下方法:

internal class Provider
{
    /// <summary>Download information from the host.</summary>
    /// <typeparam name="T">The type of data being downloaded.</typeparam>
    internal T Download<T>(string url) where T : IXmlSerializable, new()
    {
        try
        {
            var …
Run Code Online (Sandbox Code Playgroud)

c# xml xml-serialization

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

如何从XML重建C#类

我想在SQL中保存一个ac #.net类的实例,以便以后检索.我可以使用LINQ to SQL来添加一个完整的记录,其中包含构成该类的所有xml.

现在我如何检索该xml并重建类对象实例?

c# sql class xml-serialization xml-deserialization

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

如何通过记录对象的类型定义XmlSerializer的类型?

以下代码问题,在这一行:

XmlSerializer x = new XmlSerializer(typeof(????)); 
Run Code Online (Sandbox Code Playgroud)

我希望记录对象定义类型,我可以这样做吗?

public void ConvertRecordObjectToXML(object RecordObject, out string XML) 
{
    string xml = string.Empty;

    try
    {
        string XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer x = new XmlSerializer(typeof(????)); // <---- ?????
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

        x.Serialize(xmlTextWriter, RecordObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        XML = XmlizedString;
    }
    catch (Exception e)
    {
        System.Console.WriteLine(e);
        xml = "";
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization

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

通过jquery读取xml

XML

 <?xml version='1.0' encoding='utf-8' ?>
        <RecentTutorials>
        <Tutorial author='The Reddest'>
        <Title>Silverlight and the Netflix API</Title>
        <Categories>
              <Category>Tutorials</Category>
              <Category>Silverlight 2.0</Category>
              <Category>Silverlight</Category>
              <Category>C#</Category>
              <Category>XAML</Category>
        </Categories>
        <Date>1/13/2009</Date>
        </Tutorial>
        </RecentTutorials>
Run Code Online (Sandbox Code Playgroud)

脚本

$.ajax({
   type: "post",
   url: "Default.aspx?cmd=Setting",
   success: parseXml
});
Run Code Online (Sandbox Code Playgroud)
    alert(xml);//show xml File Success
    $(xml).find("Tutorial").each(function()
    {
         $("#b").append($(this).attr("author") );
    }

没有读取的XML文件虽然是alert(xml); 显示XML文件

xml asp.net jquery xmlhttprequest xml-serialization

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

XML序列化子类

我有一节课:

public abstract class BaseClass
{

}

public class FirstChild:BaseClass
{

}

public class SecondChild:BaseClass
{

}

public class Request
{
public BaseClass Child {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

我在所有类上添加了serializable属性,并在Baseclass,firstchild和secondchild类中包含了XmlInclude.

I want to achieve this:
<Request>
   <FirstChild/>
</Request>
Run Code Online (Sandbox Code Playgroud)

要么

<Request>
   <SecondChild/>
</Request>
Run Code Online (Sandbox Code Playgroud)

我使用以下方法创建请求:

Request request = new Request();
request.Child = new FirstChild();
Run Code Online (Sandbox Code Playgroud)

然后序列化它.

但我一直这样:

<Request  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Type  xsi:type="FirstChild">
</Type>

</Request>
Run Code Online (Sandbox Code Playgroud)

你能指出我做得对吗?

c# xml-serialization

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

Asp.net MVC4 Web API XML序列化忽略了公共属性

我正在使用asp.net mvc4 web api.我有一些由Devart Entity Developer生成的类,它们具有以下结构:

[Serializable]
[XmlRoot("Test")]
[JsonObject(MemberSerialization.OptIn)]
public class Test
{
    [XmlAttribute("property1")]
    [JsonProperty("property1")]
    public int Property1
    {
        get { return _Property1; }
        set
        {
            if (_Property1 != value)
            {
                _Property1 = value;
            }
        }
    }
    private int _Property1;

    [XmlAttribute("property2")]
    [JsonProperty("property2")]
    public int Property2
    {
        get { return _Property2; }
        set
        {
            if (_Property2 != value)
            {
                _Property2 = value;
            }
        }
    }
    private int _Property2;
}
Run Code Online (Sandbox Code Playgroud)

我有这样的类的测试控制器:

public class TestController : ApiController
{
    private List<Test> _tests = new …
Run Code Online (Sandbox Code Playgroud)

xml asp.net asp.net-mvc xml-serialization asp.net-web-api

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