标签: xml-serialization

Ruby on Rails高级JSON序列化

我想在我的rails应用程序中通过JSON呈现所有文章的索引以及完整的文章,但是我在弄清楚如何做到这一点时遇到了一些麻烦.

这是我的控制器:

if params[:id]
    @article = Article.find(params[:id])
else
    @article = Article.published.not_draft.by_recent.first
end

respond_to do |format|

format.js { render :json => @article.to_json(
:except => [ :created_at, :updated_at, :draft, :id, :publish ], 
:include => {
    :comments => {
        :only => [:body]
    }
}),
:callback => params[:callback]}
end
Run Code Online (Sandbox Code Playgroud)

我想在响应中做的是添加所有文章的索引,如下所示:

@index = Article.find(:all, :select => 'id, title')
Run Code Online (Sandbox Code Playgroud)

我能够做到的唯一方法是将索引和文章放入哈希或数组中,然后将其放入JSON中.

@response = { :item => @article, :index => @index }
Run Code Online (Sandbox Code Playgroud)

两者的完整代码:

@index = Article.find(:all, :select => 'id, title')

if params[:id]
    @article = Article.find(params[:id])
else
    @article = …
Run Code Online (Sandbox Code Playgroud)

ruby serialization json ruby-on-rails xml-serialization

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

如何使用XmlSerializer反序列化为List <String>

我正在尝试将下面的XML反序列化为类,将Components反序列化为a List<string>,但无法弄清楚如何执行此操作.解串器适用于所有其他属性,但不适用Components.有人知道怎么做吗?

<ArsAction>
  <CustomerName>Joe Smith</CustomerName>
  <LoginID>jdsmith</LoginID>
  <TicketGroup>DMS</TicketGroup>
  <Software>Visio 2007 Pro</Software>
  <Components>
    <Component>Component 1</Component>
    <Component>Component 2</Component>
  </Components>
  <Bldg>887</Bldg>
  <Room>1320p</Room>
</ArsAction>
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

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

指定XmlRootAttribute时XmlSerializer性能问题

我目前有一个非常奇怪的问题,我似乎无法弄清楚如何解决它.

我有一个相当复杂的类型,我正在尝试使用XmlSerializer类进行序列化.这实际上运行正常,类型序列化正确,但似乎需要长时间这样做; 大约5秒钟,具体取决于对象中的数据.

经过一些分析后,我已经缩小了问题 - 奇怪的是 - 在调用XmlSerializer.Serialize时指定一个XmlRootAttribute.我这样做是为了将从ArrayOf序列化的集合的名称更改为更有意义的东西.一旦我删除参数,操作几乎是即时的!

任何想法或建议都会非常好,因为我完全被这个问题所困扰!

.net c# xml performance xml-serialization

18
推荐指数
2
解决办法
7087
查看次数

XmlSerializing一个数组时如何设置根节点名?

我有一个对象数组,我想将其序列化为XML.这些对象注释为设置XML节点名称,但我想知道如何设置XML根节点的名称.

代码如下所示:

// create list of items
List<ListItem> list = new List<ListItem>();
list.Add(new ListItem("A1", new Location(1, 2)));
list.Add(new ListItem("A2", new Location(2, 3)));
list.Add(new ListItem("A3", new Location(3, 4)));
list.Add(new ListItem("A4<&xyz>", new Location()));

// serialise
XmlSerializer ser = new XmlSerializer(typeof(ListItem[]));
FileStream os = new FileStream(@"d:\temp\seri.xml", FileMode.Create);
ser.Serialize(os, list.ToArray());
os.Close();
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

<?xml version="1.0"?>
<ArrayOfPlace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Place>
    <Placename>A1</Placename>
    <Location>
      <Lat>1</Lat>
      <Long>2</Long>
    </Location>
  </Place>
  <Place>
  ...
Run Code Online (Sandbox Code Playgroud)

ListItem已使用XmlElement注释重命名为Place,但如何设置根节点的名称以重命名'ArrayOfPlace'节点?

.net xml-serialization root

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

在.NET中纠正"混合"类型的XML序列化和反序列化

我当前的任务涉及编写用于处理HL7 CDA文件的类库.
这些HL7 CDA文件是具有已定义XML模式的XML文件,因此我使用xsd.exe生成用于XML序列化和反序列化的.NET类.

XML Schema包含各种类型,其中包含mixed ="true"属性,指定此类型的XML节点可能包含与其他XML节点混合的普通文本.其中一种类型
XML模式的相关部分如下所示:

<xs:complexType name="StrucDoc.Paragraph" mixed="true">
    <xs:sequence>
        <xs:element name="caption" type="StrucDoc.Caption" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="br" type="StrucDoc.Br"/>
            <xs:element name="sub" type="StrucDoc.Sub"/>
            <xs:element name="sup" type="StrucDoc.Sup"/>
            <!-- ...other possible nodes... -->
        </xs:choice>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID"/>
    <!-- ...other attributes... -->
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

生成的代码这种类型如下:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(TypeName="StrucDoc.Paragraph", Namespace="urn:hl7-org:v3")]
public partial class StrucDocParagraph {

    private StrucDocCaption captionField;

    private object[] itemsField;

    private string[] textField;

    private string idField;

    // ...fields for other …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization

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

条件xml序列化

我有以下C#类:

public class Books
{

public List<Book> BookList;

}

public class Book
{

public string Title;
public string Description;
public string Author;
public string Publisher;

}
Run Code Online (Sandbox Code Playgroud)

如何将此类序列化为以下XML?

<Books>
  <Book Title="t1" Description="d1"/>
  <Book Description="d2" Author="a2"/>
  <Book Title="t3" Author="a3" Publisher="p3"/>
</Books>
Run Code Online (Sandbox Code Playgroud)

我希望XML只包含那些值为null/empty的属性.例如:在第一个Book元素中,author是空白的,因此它不应出现在序列化XML中.

c# xml xml-serialization

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

流不可读错误

我在声明中收到"Stream is not readable"的消息:

using (StreamReader sr = new StreamReader(ms))
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这里发布的提示但没有成功.谢谢您的帮助.

这是我的代码:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Conflict));
//Serialize Conflicts array to memorystream as XML
using (MemoryStream ms = new MemoryStream())
{
    using (StreamWriter sw = new StreamWriter(ms))
    {
        foreach (Conflict ct in Conflicts)      
            xmlSerializer.Serialize(sw, ct);

        sw.Flush(); //Site tip
        ms.Position = 0;  //Site tip
    }
    //Retrieve memory stream to string
    using (StreamReader sr = new StreamReader(ms))
    {
        string conflictXml = String.Format(CultureInfo.InvariantCulture, "{0}</NewDataSet>",
Run Code Online (Sandbox Code Playgroud)

c# memorystream xml-serialization

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

.NET,为什么我必须使用*Specified属性来强制序列化?有没有办法不这样做?

我在我的项目中使用xml-serialization来基于xml架构序列化和反序列化对象.我使用xsd工具创建在序列化/反序列化对象时使用的类.

当我在发送之前序列化对象时,我被迫将*Specified属性设置为true,以强制序列化程序序列化所有非类型的属性string.

有没有办法强制所有属性的序列化,而不必将*Specified属性设置为true?

.net c# xsd xml-serialization

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

反序列化XML数组,其中根是数组,元素不遵循约定

我得到的XML是由外部源提供的,所以我没有能力轻松地重新格式化它.我想在我的实体上使用xml属性,而不必编写知道如何格式化XML和实体的linq查询.这是一个例子:

<?xml version="1.0"?>
<TERMS>
    <TERM>
        <ID>2013-2</ID>
        <DESC>Spring 2013</DESC>
    </TERM>
    <TERM>
        <ID>2013-3</ID>
        <DESC>Summer 2013 Jun&amp;Jul</DESC>
    </TERM>
</TERMS>
Run Code Online (Sandbox Code Playgroud)

我知道XmlSerializer的预计ArrayOfTerm而不是条款的例子,但我能调整我的实体使用不同的元素名称与XML属性,如这样的:

public class TermData
{
    [XmlArray("TERMS")]
    [XmlArrayItem("TERM")]
    public List<Term> terms;
}

public class Term
{
    [XmlElement("ID")]
    public string id;

    [XmlElement("DESC")]
    public string desc;
}
Run Code Online (Sandbox Code Playgroud)

我正在反序列化数据,如下所示:

TermData data;

XmlSerializer serializer = new XmlSerializer(typeof(TermData));
using (StringReader reader = new StringReader(xml))
{
   data = (TermData)serializer.Deserialize(reader);
}

return View(data.terms);
Run Code Online (Sandbox Code Playgroud)

我面临的问题是TERMS是根和数组本身.如果XML的根元素不是数组,我可以像这样编辑我的TermData类,它会正确地反序列化(已经过测试).

[XmlRoot("ROOT")]
public class TermData
{
    [XmlArray("TERMS")]
    [XmlArrayItem("TERM")]
    public List<Term> terms;
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用TERMS作为XMLRoot不起作用.现在,我的代码正在抛出

 InvalidOperationException: There is an error in …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization

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

将PHP关联数组传递给XML或从XML传递

有没有一种简单的方法可以将PHP关联数组封送到XML和从XML封送?例如,我有以下数组:

$items = array("1", "2",
    array(
        "item3.1" => "3.1",
        "item3.2" => "3.2"
        "isawesome" => true
    )
);
Run Code Online (Sandbox Code Playgroud)

我将如何在尽可能少的行中将其转换为类似于以下XML的内容,然后再返回?

<items>
    <item>1</item>
    <item>2</item>
    <item>
        <item3_1>3.1</item3_1>
        <item3_2>3.2</item3_2>
        <isawesome>true</isawesome>
    </item>
</items>
Run Code Online (Sandbox Code Playgroud)

我真的不在乎是否需要更改数组结构或者出现的XML与上面的示例不同.我一直在尝试使用PHP的XMLReaderXMLWriter,但是文档非常糟糕,我生成的代码看起来与我认为的样子完全不同:

$xml = SomeXMLWriter::writeArrayToXml($items);
$array = SomeXMLWriter::writeXmlToArray($xml);
Run Code Online (Sandbox Code Playgroud)

在没有编写我自己的自定义类的情况下,获取PHP数组的基本原始XML转储是否真的必须更难?

我尽量避免梨.除了我曾经遇到的配置问题之外,我从来没有坚持使用过我曾经使用过的任何软件包.

php xml xml-serialization

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