gpt4 book ai didi

c# - XML 输出顺序错误

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:35 25 4
gpt4 key购买 nike

我用 C# 编写了一个简单的 WCF Web 服务,它从数据库返回记录。

WCF 使用以下方法:getQuestionnaireForID?id=(questionnaireID)。 Web 服务从数据库返回所有正确的记录,但它们的顺序似乎有误。

这是我希望 XML 的顺序:

<QuestionnaireXML xmlns="http://schemas.datacontract.org/2004/07/QuestionnaireDescriptor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<QuestionnaireName>Sample Questionnaire</QuestionnaireName>
<Questions>
<Question>
<QuestionID>297</QuestionID>
<QuestionName>What is your favorite type of tree?</QuestionName>
<Answers>
<Answer>
<AnswerTitle>Beech</AnswerTitle>
</Answer>
<Answer>
<AnswerTitle>Oak</AnswerTitle>
</Answer>
</Answers>
</Question>
<Question>
<QuestionID>298</QuestionID>
<QuestionName>Windows or Mac?</QuestionName>
<Answers>
<Answer>
<AnswerTitle>Mac</AnswerTitle>
</Answer>
<Answer>
<AnswerTitle>Windows</AnswerTitle>
</Answer>
</Answers>
</Question>
</Questions>
</QuestionnaireXML>

但它当前按以下顺序返回:

<QuestionnaireXML xmlns="http://schemas.datacontract.org/2004/07/QuestionnaireDescriptor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<QuestionnaireName>Hello sir how do you do today?</QuestionnaireName>
<Questions>
<Question>
<Answers>
<Answer>
<AnswerTitle>Beech</AnswerTitle>
</Answer>
<Answer>
<AnswerTitle>Oak</AnswerTitle>
</Answer>
</Answers>
<QuestionID>297</QuestionID>
<QuestionName>What is your favorite type of tree?</QuestionName>
</Question>
<Question>
<Answers>
<Answer>
<AnswerTitle>Mac</AnswerTitle>
</Answer>
<Answer>
<AnswerTitle>Windows</AnswerTitle>
</Answer>
</Answers>
<QuestionID>298</QuestionID>
<QuestionName>Windows or Mac?</QuestionName>
</Question>
</Questions>
</QuestionnaireXML>

我不确定这是由于未设置样式的 XML 文档还是因为我的循环顺序错误。这是我的 WCF xml 描述符。

[DataContract]
public class QuestionnaireXML
{
OsqarSQL getData;
DataTable DT;
private String _questionnaireName;
private List<Question> _Question = new List<Question>();

public QuestionnaireXML(int QuestionnaireID)
{
// Loop through datatable for questionIDs and load the questions
getData = new OsqarSQL();
_questionnaireName = getData.GetQuestionnaireName(QuestionnaireID);
DT = getData.GetQuestionIDWCF(QuestionnaireID);
for (int i = 0; i < DT.Rows.Count; i++)
{
_Question.Add(new Question(Int32.Parse(DT.Rows[i][0].ToString())));
}
}

// Define DataMembers for XML output
[DataMember]
public String QuestionnaireName
{
get { return _questionnaireName; }
set { _questionnaireName = value; }
}

[DataMember]
public List<Question> Questions
{
get { return _Question; }
set { _Question = value; }
}
}

[DataContract]
public class Question
{
private Int32 _questionId;
private String _questionName;
OsqarSQL getData;
DataTable DT;
DataTable AT;
private List<Answer> _Answer = new List<Answer>();

public Question(int QuestionID)
{
getData = new OsqarSQL();
DT = getData.GetQuestionNameWCF(QuestionID);
_questionId = (int)DT.Rows[0][0];
_questionName = DT.Rows[0][1].ToString();
AT = getData.GetAnswerTitle(QuestionID);
for (int i = 0; i < AT.Rows.Count; i++)
{
_Answer.Add(new Answer(Int32.Parse(AT.Rows[i][0].ToString())));
}
}

// Define DataMembers for XML output
[DataMember]
public Int32 QuestionID
{
get { return _questionId; }
set { _questionId = value; }
}

[DataMember]
public String QuestionName
{
get { return _questionName; }
set { _questionName = value; }
}

[DataMember]
public List<Answer> Answers
{
get { return _Answer; }
set { _Answer = value; }
}
}

[DataContract]
public class Answer
{
private Int32 _answerId;
private String _answerTitle;
OsqarSQL getData;
DataTable DT;

// Constructor Logic
public Answer(int AnswerID)
{
getData = new OsqarSQL();
DT = getData.GetAnswerTitleWcf(AnswerID);
_answerTitle = DT.Rows[0][1].ToString();
}

// Define DataMembers for XML output
[DataMember]
public String AnswerTitle
{
get { return _answerTitle; }
set { _answerTitle = value; }
}
}

我该如何解决这个问题?尝试解析 XML 时会导致问题吗?

最佳答案

This is the order I would like the XML to be in:

为什么?这是必要的吗?我敢打赌这几乎肯定没有必要。

WCF DataContractSerializer 默认按字母顺序序列化。您会注意到您看到的 XML 中的节点是按字母顺序排列的。列出类属性的顺序并不重要。

如有必要,您可以使用 Order 属性指定元素的顺序(参见 MSDN Data Member Order )。

另一种选择是使用 XMLSerializer,它更灵活但不如 DataContractSerializer 简单。

除非真的需要重新排列这些元素,否则我不会关心它。

关于c# - XML 输出顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com