Bu veriler değil-güçlü yazılmış bir web hizmeti çağrısı yoluyla veri seri hale getirmek için nasıl ilgili çok karmaşık bir soru. Ben mümkün olduğunca en iyi ortaya koymak için çalışacağım.
Sample Storage Object:
[Serializable]
public class StorageObject {
public string Name { get; set; }
public string Birthday { get; set; }
public List<NameValuePairs> OtherInfo { get; set; }
}
[Serializable]
public class NameValuePairs {
public string Name { get; set; }
public string Value { get; set; }
}
Sample Use:
[WebMethod]
public List<StorageObject> GetStorageObjects() {
List<StorageObject> o = new List<StorageObject>() {
new StorageObject() {
Name = "Matthew",
Birthday = "Jan 1st, 2008",
OtherInfo = new List<NameValuePairs>() {
new NameValuePairs() { Name = "Hobbies", Value = "Programming" },
new NameValuePairs() { Name = "Website", Value = "Stackoverflow.com" }
}
},
new StorageObject() {
Name = "Joe",
Birthday = "Jan 10th, 2008",
OtherInfo = new List<NameValuePairs>() {
new NameValuePairs() { Name = "Hobbies", Value = "Programming" },
new NameValuePairs() { Name = "Website", Value = "Stackoverflow.com" }
}
}
};
return o;
}
Return Value from Web Service:
<StorageObject>
<Name>Matthew</Name>
<Birthday>Jan 1st, 2008</Birthday>
<OtherInfo>
<NameValuePairs>
<Name>Hobbies</Name>
<Value>Programming</Value>
</NameValuePairs>
<NameValuePairs>
<Name>Website</Name>
<Value>Stackoverflow.com</Value>
</NameValuePairs>
</OtherInfo>
</StorageObject>
What I want:
<OtherInfo>
<Hobbies>Programming</Hobbies>
<Website>Stackoverflow.com</Website>
</OtherInfo>
The Reason & Other Stuff:
Birincisi, yazının uzunluğu için özür dilerim, ama ben de tekrarlanabilir kodu vermek istedim.
Ben PHP web hizmetleri tüketen çünkü ben, bu formatta istiyorum. Ben kolayca gitmek istiyorum:
/ / BU imporant
In PHP => "$Result["StorageObject"]["OtherInfo"]["Hobbies"]".
Bu başka bir formatta ise, o hiç bana bunu başarmak için hiçbir yolu olmaz. Ben hizmet tüketen ediyorsam Ayrıca, C #, ben de aşağıdakileri yapabiliyor olmak istiyorum:
/ / BU imporant
In C# => var m = ServiceResult[0].OtherInfo["Hobbies"];
Ne yazık ki, bunu gerçekleştirmek için nasıl emin değilim. Ben, ancak, bu su dışarı WSDL şema esti (StackOverflow: IXmlSerializer Dictionary bakınız) IXmlSerializer uygulanan özel bir sözlük inşa ederek, bu şekilde elde edebildi. Aynı zamanda çok çok karmaşık ve benim WinFormsTester uygulamada korkunç sonuçlar üretti!
Bunu gerçekleştirmek için herhangi bir yolu var mı? Nesnelerin ne tür oluşturmak gerekiyor? Kesinlikle yazılı bir koleksiyon / yaparak dışında bu / yapmak için herhangi bir yolu var mı? Ben yaparsam Açıkçası, bu kesinlikle böyle yazmış:
public class OtherInfo {
public string Hobbies { get; set; }
public string FavoriteWebsite { get; set; }
}
Sonra ben hiçbir WSDL sorunları olurdu, mükemmel bir işe, ben kolayca PHP erişmek mümkün olacak, ve C # (. OtherInfo.Hobbies) olacaktır.
However, I would completely lose the point of NVP's, in that I would have to know in advance what the list is, and it would be un