我想在我的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) 我正在尝试将下面的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) 我目前有一个非常奇怪的问题,我似乎无法弄清楚如何解决它.
我有一个相当复杂的类型,我正在尝试使用XmlSerializer类进行序列化.这实际上运行正常,类型序列化正确,但似乎需要很长时间这样做; 大约5秒钟,具体取决于对象中的数据.
经过一些分析后,我已经缩小了问题 - 奇怪的是 - 在调用XmlSerializer.Serialize时指定一个XmlRootAttribute.我这样做是为了将从ArrayOf序列化的集合的名称更改为更有意义的东西.一旦我删除参数,操作几乎是即时的!
任何想法或建议都会非常好,因为我完全被这个问题所困扰!
我有一个对象数组,我想将其序列化为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'节点?
我当前的任务涉及编写用于处理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) 我有以下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中.
我在声明中收到"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) 我在我的项目中使用xml-serialization来基于xml架构序列化和反序列化对象.我使用xsd工具创建在序列化/反序列化对象时使用的类.
当我在发送之前序列化对象时,我被迫将*Specified属性设置为true,以强制序列化程序序列化所有非类型的属性string.
有没有办法强制所有属性的序列化,而不必将*Specified属性设置为true?
我得到的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&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) 有没有一种简单的方法可以将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的XMLReader和XMLWriter,但是文档非常糟糕,我生成的代码看起来与我认为的样子完全不同:
$xml = SomeXMLWriter::writeArrayToXml($items);
$array = SomeXMLWriter::writeXmlToArray($xml);
Run Code Online (Sandbox Code Playgroud)
在没有编写我自己的自定义类的情况下,获取PHP数组的基本原始XML转储是否真的必须更难?
我尽量避免梨.除了我曾经遇到的配置问题之外,我从来没有坚持使用过我曾经使用过的任何软件包.