高手进~~ C# 类与类之间的访问

chenlin860209 2009-04-28 10:28:16
各位高手帮忙解决看看:
问题是这样的,对一串字符串进行处理,字符串形式有:
1.[{"operation":"fetch","AAA":"BBB","CCC":"DDD"},{"operation":"zzz","EEE":000,"FFF":111,"GGG":222,"HHH":333}]
2.[{"operation":"fetch","AAA":"BBB","CCC":"DDD"},{"operation":"yyy","III":444,"JJJ":555,"KKK":666,"LLL":777,"MMM":888}]
等等,前半部分{内部分}一般为固定,后半部分会出现变化,以operation开头,后面的属性根据operation后的值改变而改变,就是不同的operation值后面的内容也是不同的,考虑到将来可能还要再添加,所以对这个字符串处理我想写一个字符串的处理类来处理。(在学校的时候面向对象学的不好,现在用的很是吃力,所以希望各位大侠帮帮忙)

语言是C#,VS2005的环境
我现在已经实现的功能,效率可能不高,如果有好的建议,不胜感激~~~
先将字符串分割,首先分为两部分(取出{}内的部分),然后去除“"”,再以“,”分割获得一串数组,在获得的数组中再以“:”为分隔符获得一个最新的数组,如处理后的数组为(以1的后半部分为例):
Arr[0] = operation
Arr[1] = ZZZ
Arr[2] = EEE
Arr[3] = 000
Arr[4] = FFF
Arr[5] = 111
Arr[6] = GGG
Arr[7] = 222
Arr[8] = HHH
Arr[9] = 333
问题就在这,要根据Arr[1]的值变化然后分别对其他的属性赋值,我尝试在类里面再建一个类或结构来存放这些属性以及值,但类和类之间的访问复制不行,就是在外部调用的时候并没有获得我所想要的值,不知道各位有经验的有没有什么好的办法来解决。
...全文
234 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
回复8楼: 暂时还不需要存放这些数据,数据主要是通过页面传递到处理页面,然后要将地址中的各个参数分别对应到相应的函数去处理,有的是作为函数选择的依据,如operation的值,有些是选择后的函数相应的参数,如operation后面的哪些属性以及相应的值

回复10楼:joson格式,我去gg看看

感谢回复者以及帮顶者~~
chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
下面是一些辅助函数
/// <summary>
/// 验证字符串是否有效
/// </summary>
/// <param name="str">待处理的字符串</param>
/// <returns></returns>
private bool isValidString(string str)
{
return (str.IndexOf('{') == -1 ? false : true) && (str.IndexOf('}') == -1 ? false : true);
}

/// <summary>
/// 去除字符串中的“{”和“}”符号
/// </summary>
/// <param name="str">待处理的字符串</param>
/// <returns></returns>
private string RemoveBraces(string str)
{
if (AcountString(str, "{") == AcountString(str, "}")) //&& isValidString(str)
{
str = str.Replace("{", String.Empty);
str = str.Replace("}", String.Empty);
}
return str;
}
chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
类的构造函数代码
try
{
string pattern = @"({[^{]+})";

string[] subStrings = Regex.Split(Script, pattern); // Split the string, Extract the content between { and }

foreach (string match in subStrings)
{
if (isValidString(match))
{
string TempStr = RemoveBraces(match);
TempStr = TempStr.Replace("\"", String.Empty);
string[] subTempStr = TempStr.Split(',');
string[] subTempStrArray = new string[subTempStr.Length * 2];
for (int i = 0; i < subTempStr.Length; i++)
{
subTempStrArray[i * 2] = subTempStr[i].Split(':')[0];
subTempStrArray[i * 2 + 1] = subTempStr[i].Split(':')[1];
}
if (subTempStrArray[0] == "operation")
{
switch (subTempStrArray[1])
{
case "fetch":
//保存fetch后面的各个属性值
break;
case "crop":
//保存ZZZ后面的各个属性值
break;
}
}
}
}
}
catch (Exception ex)
{
//输出异常
}


调用部分:
ScriptSplit ss = new ScriptSplit(script); //ScriptSplit类名 script处理字符串
如果ss可以根据operation获得相应的属性值就可以了
不知道如何操作
我姓区不姓区 2009-04-28
  • 打赏
  • 举报
回复
这的确是json格式的数据,你的类是怎么写的
zhoulehua 2009-04-28
  • 打赏
  • 举报
回复
友情帮顶。
deyga 2009-04-28
  • 打赏
  • 举报
回复
我想楼主是想解析一个什么类似测试后得到的结果,然后放到资料库里面吧
以前我也碰到过
我当时的解决方法是,把属性的名字放到文档的开头,也以相对应的字符分割
解析的时候先解析文档的第一行,然后用下面的值去匹配,就OK了
chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
回复3楼:再存放到数据库我觉得操作又多一步,调用的时候又要读取数据库,效率上肯定很不理想,而且现在也没那个必要。

回复4楼:JSON.NET 是什么?
leiminlovesoft 2009-04-28
  • 打赏
  • 举报
回复
学习!!
chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
感谢楼上的程序,现在的主要问题不是分割程序,分割程序已经实现(效率方面我想楼上的可能会高一些,把主要问题解决后我会再研究研究)

主要是后面的根据Arr[1]的值变化然后分别保存其他的属性值供外部调用~~~
阿非 2009-04-28
  • 打赏
  • 举报
回复
JSON.NET
meheartfly 2009-04-28
  • 打赏
  • 举报
回复
Arr1、Arr2...他们的值都存到数据库表里面好了,用的时候查询Arr1,取出Arr2,Arr3...等值就可以了
zgke 2009-04-28
  • 打赏
  • 举报
回复
string _Value="[{\"operation\":\"fetch\",\"AAA\":\"BBB\",\"CCC\":\"DDD\"},{\"operation\":\"zzz\",\"EEE\":000,\"FFF\":111,\"GGG\":222,\"HHH\":333}]";
string[] _Arr = GetList(_Value);


public string[] GetList(string p_Value)
{
int _Star = p_Value.IndexOf("},{");
if (_Star == -1) return null;

p_Value = p_Value.Remove(0, _Star);

p_Value = p_Value.Replace("{", "").Replace("}","").Replace("]","").Replace("\"", "");

return p_Value.Split(new char[] { ':', ',' }, StringSplitOptions.RemoveEmptyEntries);

}

chenlin860209 2009-04-28
  • 打赏
  • 举报
回复
100分都没人来啊~~~

我顶~

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧