我正在研究一组将用于序列化为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与集合user和group对象.然而,最好的我可以计算的是,我需要一个类root,users,user,groups和group,其中users和groups包含的唯一集合user和group分别,并root包含一个users和groups对象.
在那里谁知道比我更好?(别撒谎,我知道有).
我有以下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,然后创建一个基于此的类,但该工具生成的杂乱太多.我想我离这儿很近.我错过了什么?
有没有办法让.NET中的XmlSerialization在序列化时忽略某些属性?
例如,我有一个名为IsValid的公共bool属性,它是我不想序列化的对象的唯一属性.我怎么能这样做?
我已经使用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) 我正在编写一个类库,它抽象出网站上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) 我想在SQL中保存一个ac #.net类的实例,以便以后检索.我可以使用LINQ to SQL来添加一个完整的记录,其中包含构成该类的所有xml.
现在我如何检索该xml并重建类对象实例?
以下代码问题,在这一行:
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) 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文件
我有一节课:
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)
你能指出我做得对吗?
我正在使用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)