我有一个类如下。我想为一个网络服务发送一个Messageformat
这样的内容,因此我需要向Attributecollection
和Input
添加值。
public class Messageformat
{
public class Attributecollection
{
public string name { get; set; }
public int id { get; set; }
}
public class Input
{
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class output
{
public string soid { get; set; }
}
}
我想为此类添加值。我一次只能调用一个类,并为该类添加值。有没有办法调用类Messageformat
并通过该对象向子类添加值。我知道它是一个嵌套的类结构。我不是很好,所以有人可以分享一些想法吗?
答案 0 :(得分:1)
你为什么这样做?不是嵌套类,而是在同一级别声明类,并在其他类的MessageFormat
内创建属性,即
public class Messageformat
{
public Attributecollection AtrributeCollection{get;set;}
public Input Input{get;set;}
public output Output{get;set;}
}
public class Attributecollection
{
public string name { get; set; }
public int id { get; set; }
}
public class Input
{
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class output
{
public string soid { get; set; }
}
这样,您可以轻松创建MessageFormat的Object并插入所有其他三个类的数据,即
[WebMethod]
public string GetMessage()
{
Messageformat msgFrmt = new Messageformat();
msgFrmt.AtrributeCollection = new Atrributecollection()
{
name="test",
id=1
};
msgFrmt.Input = new Input()
{
soid= "soid value",
itemname="item",
qty=10
};
msgFrmt.Output = new output()
{
soid="soid value"
};
return new JavaScriptSerializer().Serialize(msgFrmt);
}
上面是一个简单的例子,您可以如何组织您的类并将它们用于任何目的。 (上面是一个webmethod的例子,但你可以做任何你想做的事情)
答案 1 :(得分:1)
您的问题不是很明确,但如果您要问如何填充数据,则必须将所谓的属性添加到您的父类。请注意,您不必使用内部类。
public class Attributecollection
{
public string name { get; set; }
public int id { get; set; }
}
public class Input
{
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class output
{
public string soid { get; set; }
}
public class Messageformat
{
public Attributecollection MyAttributecollection { get; set; }
public Input MyInput { get; set; }
public output Myoutput { get; set; }
}
...
Messageformat test = new Messageformat
{
MyAttributecollection = new Attributecollection { name = "", id = 1 },
MyInput = new Input { soid = "", itemname ="", qty = 1 },
Myoutput = new output { soid = "" }
};
答案 2 :(得分:1)
您应该将每个类分开以进行定义。然后(WCF)你将能够创建你的DataContract并指定它的数据库 - 属性,你在消息中发送的内容:
[DataContract]
public class Messageformat
{
[DataMember]
public Attributecollection prop1;
[DataMember]
public Input prop2;
[DataMember]
public output prop3;
}
[DataContract]
public class Attributecollection
{
[DataMember]
public string name { get; set; }
[DataMember]
public int id { get; set; }
}
[DataContract]
public class Input
{
[DataMember]
public string soid { get; set; }
[DataMember]
public string itemname { get; set; }
[DataMember]
public int qty { get; set; }
}
[DataContract]
public class output
{
[DataMember]
public string soid { get; set; }
}
然后你应该生成你的服务合同,你可以在那里使用你的课程
[ServiceContract]
public interface IService
{
[OperationContract]
SendMessage(Messageformat message);
}
答案 3 :(得分:1)
从它的外观/声音中,你想要一个暴露其他类属性的类的实例:
public class Messageformat {
public MessageFormat() {
Attributes = new Attributecollection();
Input = new Input();
Output = new output();
}
public Attributecollection Attributes { get; set; }
public Input Input { get; set; }
public output Output { get; set; }
}
public class Attributecollection {
public string name { get; set; }
public int id { get; set; }
}
public class Input {
public string soid { get; set; }
public string itemname { get; set; }
public int qty { get; set; }
}
public class output {
public string soid { get; set; }
}
然后你可以这样做:
var format = new MessageFormat();
format.Input.soid = "something";
format.Input.itemname = "something";
等等。在那里,有很多改进可以肯定,但是你有它。
答案 4 :(得分:1)
为什么不在其访问级别中创建内部类及其属性 static ,如下所示:
class MessageFormat
{
public static class Attributecollection
{
public static string name { get; set; }
public static int id { get; set; }
}
public static class Input
{
public static string soid { get; set; }
public static string itemname { get; set; }
public static int qty { get; set; }
}
public static class output
{
public static string soid { get; set; }
}
}
然后你可以访问内部类,虽然没有实例化:
MessageFormat.Attributecollection.id = 1;
MessageFormat.Attributecollection.name = "test";
MessageFormat.Input.itemname = "Soda";
MessageFormat.Input.qty = 10;
虽然它违背了嵌套类的目的,因为据说嵌套类的内部类只能由外部类或父类访问。但根据您的要求,此代码将满足该要求。