Webサービスで使用するXMLフラグメントを作成する必要があります。xml宣言があると、Webサービスは要求を拒否します。これをサポートするために、次のクラスがあります。
public class ContentQueryCriteria
{
public int Type { get; set; }
public string Value { get; set; }
public int Condition { get; set; }
}
これにより、リクエスト基準を設定して結果を取得できます。
コードは次のように使用されます。
ContentQueryCriteria content = new ContentQueryCriteria();
content.Type = 1;
content.Value = "NAVS500";
content.Condition = 1;
string requestBody = SerializeToString(content);
Console.WriteLine(requestBody);
これをXMLファイルにシリアル化すると、XML宣言や名前付けなしで、適切な応答が得られます。ただし、ファイルではなくメモリストリームにデータをキャプチャしたいと思います。
次の方法(http://www.codeproject.com/Articles/58287/XML-Serialization-Tips-Tricksから取得)を使用すると、結果を得ることができますが、何らかの理由で?文字列の一部としてリストされます。
public static string SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
MemoryStream ms = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.Unicode;
XmlWriter writer = XmlWriter.Create(ms, settings);
serializer.Serialize(writer, obj, ns);
return Encoding.Unicode.GetString(ms.ToArray());
}
結果の文字列は次のとおりです。
?<ContentQueryCriteria><Type>1</Type><Value>NAVS500</Value><Condition>1</Condition></ContentQueryCriteria>
OmitXmlDeclaration = falseに設定すると、次の文字列が表示されます。
?<?xml version="1.0" encoding="utf-16"?><ContentQueryCriteria><Type>1</Type><Value>NAVS500</Value><Condition>1</Condition></ContentQueryCriteria>
誰かが私がなぜ余分なのかを判断するのを手伝ってもらえますか?ありますか、どうすれば削除できますか?
BOMなしでSerializeToStringメソッドを動作させる
public static string SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
MemoryStream ms = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.Encoding = new UnicodeEncoding(bigEndian: false, byteOrderMark: false);
XmlWriter writer = XmlWriter.Create(ms, settings);
serializer.Serialize(writer, obj, ns);
return Encoding.Unicode.GetString(ms.ToArray());
}